@@ -22,7 +22,6 @@ else |
||
22 | 22 |
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw] |
23 | 23 |
end |
24 | 24 |
|
25 |
-gem 'mysql2', '~> 0.3.16' |
|
26 | 25 |
gem 'devise', '~> 3.2.4' |
27 | 26 |
gem 'kaminari', '~> 0.16.1' |
28 | 27 |
gem 'bootstrap-kaminari-views', '~> 0.0.3' |
@@ -73,11 +72,13 @@ gem 'weibo_2', '~> 0.1.4' |
||
73 | 72 |
gem 'hipchat', '~> 1.2.0' |
74 | 73 |
gem 'xmpp4r', '~> 0.5.6' |
75 | 74 |
gem 'slack-notifier', '~> 0.5.0' |
76 |
- |
|
77 | 75 |
gem 'therubyracer', '~> 0.12.1' |
78 |
- |
|
79 | 76 |
gem 'mqtt' |
80 | 77 |
|
78 |
+gem 'mysql2', '~> 0.3.16' |
|
79 |
+gem 'pg', group: :production |
|
80 |
+gem 'unicorn', groups: [:development, :production] |
|
81 |
+gem 'rails_12factor', group: :production |
|
81 | 82 |
|
82 | 83 |
group :development do |
83 | 84 |
gem 'binding_of_caller' |
@@ -161,6 +161,7 @@ GEM |
||
161 | 161 |
kaminari (0.16.1) |
162 | 162 |
actionpack (>= 3.0.0) |
163 | 163 |
activesupport (>= 3.0.0) |
164 |
+ kgio (2.8.0) |
|
164 | 165 |
kramdown (1.3.3) |
165 | 166 |
launchy (2.4.2) |
166 | 167 |
addressable (~> 2.3) |
@@ -192,6 +193,7 @@ GEM |
||
192 | 193 |
multi_xml (~> 0.5) |
193 | 194 |
rack (~> 1.2) |
194 | 195 |
orm_adapter (0.5.0) |
196 |
+ pg (0.17.1) |
|
195 | 197 |
polyglot (0.3.5) |
196 | 198 |
protected_attributes (1.0.8) |
197 | 199 |
activemodel (>= 4.0.1, < 5.0) |
@@ -214,11 +216,17 @@ GEM |
||
214 | 216 |
bundler (>= 1.3.0, < 2.0) |
215 | 217 |
railties (= 4.1.4) |
216 | 218 |
sprockets-rails (~> 2.0) |
219 |
+ rails_12factor (0.0.2) |
|
220 |
+ rails_serve_static_assets |
|
221 |
+ rails_stdout_logging |
|
222 |
+ rails_serve_static_assets (0.0.2) |
|
223 |
+ rails_stdout_logging (0.0.3) |
|
217 | 224 |
railties (4.1.4) |
218 | 225 |
actionpack (= 4.1.4) |
219 | 226 |
activesupport (= 4.1.4) |
220 | 227 |
rake (>= 0.8.7) |
221 | 228 |
thor (>= 0.18.1, < 2.0) |
229 |
+ raindrops (0.11.0) |
|
222 | 230 |
rake (10.3.2) |
223 | 231 |
ref (1.0.5) |
224 | 232 |
rest-client (1.6.7) |
@@ -317,6 +325,10 @@ GEM |
||
317 | 325 |
uglifier (2.5.1) |
318 | 326 |
execjs (>= 0.3.0) |
319 | 327 |
json (>= 1.8.0) |
328 |
+ unicorn (4.6.3) |
|
329 |
+ kgio (~> 2.6) |
|
330 |
+ rack |
|
331 |
+ raindrops (~> 0.7) |
|
320 | 332 |
uuid (2.3.7) |
321 | 333 |
macaddr (~> 1.0) |
322 | 334 |
uuidtools (2.1.4) |
@@ -374,11 +386,13 @@ DEPENDENCIES |
||
374 | 386 |
mqtt |
375 | 387 |
mysql2 (~> 0.3.16) |
376 | 388 |
nokogiri (~> 1.6.1) |
389 |
+ pg |
|
377 | 390 |
protected_attributes (~> 1.0.8) |
378 | 391 |
pry |
379 | 392 |
quiet_assets |
380 | 393 |
rack |
381 | 394 |
rails (= 4.1.4) |
395 |
+ rails_12factor |
|
382 | 396 |
rr |
383 | 397 |
rspec (~> 2.14) |
384 | 398 |
rspec-rails (~> 2.14) |
@@ -395,6 +409,7 @@ DEPENDENCIES |
||
395 | 409 |
typhoeus (~> 0.6.3) |
396 | 410 |
tzinfo-data |
397 | 411 |
uglifier (>= 1.3.0) |
412 |
+ unicorn |
|
398 | 413 |
vcr |
399 | 414 |
webmock (~> 1.17.4) |
400 | 415 |
weibo_2 (~> 0.1.4) |
@@ -1,13 +1,15 @@ |
||
1 | 1 |
# Procfile for development using the new threaded worker (scheduler, twitter stream and delayed job) |
2 |
-web: bundle exec rails server |
|
3 |
-jobs: bundle exec rails runner bin/threaded.rb |
|
2 |
+# web: bundle exec rails server |
|
3 |
+# jobs: bundle exec rails runner bin/threaded.rb |
|
4 |
+ |
|
5 |
+web: bundle exec unicorn -p $PORT -c ./deployment/heroku/unicorn.rb |
|
4 | 6 |
|
5 | 7 |
# Possible Profile configuration for production: |
6 | 8 |
# web: bundle exec unicorn -c config/unicorn/production.rb |
7 | 9 |
# jobs: bundle exec rails runner bin/threaded.rb |
8 | 10 |
|
9 |
-# Old version with seperate processes (use this if you have issues with the threaded version) |
|
10 |
-#web: bundle exec rails server |
|
11 |
-#schedule: bundle exec rails runner bin/schedule.rb |
|
12 |
-#twitter: bundle exec rails runner bin/twitter_stream.rb |
|
13 |
-#dj: bundle exec script/delayed_job run |
|
11 |
+# Old version with seperate processes for each component (use this if you have issues with the threaded version) |
|
12 |
+# web: bundle exec rails server |
|
13 |
+# schedule: bundle exec rails runner bin/schedule.rb |
|
14 |
+# twitter: bundle exec rails runner bin/twitter_stream.rb |
|
15 |
+# dj: bundle exec script/delayed_job run |
@@ -5,5 +5,5 @@ Delayed::Worker.read_ahead = 5 |
||
5 | 5 |
Delayed::Worker.default_priority = 10 |
6 | 6 |
Delayed::Worker.delay_jobs = !Rails.env.test? |
7 | 7 |
|
8 |
-Delayed::Worker.logger = Logger.new(Rails.root.join('log', 'delayed_job.log')) |
|
9 |
-Delayed::Worker.logger.level = Logger::DEBUG |
|
8 |
+# Delayed::Worker.logger = Logger.new(Rails.root.join('log', 'delayed_job.log')) |
|
9 |
+# Delayed::Worker.logger.level = Logger::DEBUG |
@@ -0,0 +1,49 @@ |
||
1 |
+require "net/http" |
|
2 |
+ |
|
3 |
+worker_processes Integer(ENV["WEB_CONCURRENCY"] || 2) |
|
4 |
+timeout 15 |
|
5 |
+preload_app true |
|
6 |
+ |
|
7 |
+# Note that this will only work correctly when running Heroku with ONE web worker. |
|
8 |
+# If you want to run more than one, use the standard Huginn Procfile instead with separate web and job entries. |
|
9 |
+Thread.new do |
|
10 |
+ worker_pid = nil |
|
11 |
+ while true |
|
12 |
+ if worker_pid.nil? |
|
13 |
+ worker_pid = spawn("bundle exec rails runner bin/threaded.rb") |
|
14 |
+ puts "New threaded worker PID: #{worker_pid}" |
|
15 |
+ end |
|
16 |
+ |
|
17 |
+ sleep 30 |
|
18 |
+ |
|
19 |
+ if ENV['PING_URL'] |
|
20 |
+ Net::HTTP.get_response(URI(ENV['PING_URL'])) |
|
21 |
+ end |
|
22 |
+ |
|
23 |
+ begin |
|
24 |
+ Process.getpgid worker_pid |
|
25 |
+ rescue Errno::ESRCH |
|
26 |
+ # No longer running |
|
27 |
+ worker_pid = nil |
|
28 |
+ end |
|
29 |
+ end |
|
30 |
+end |
|
31 |
+ |
|
32 |
+before_fork do |server, worker| |
|
33 |
+ Signal.trap 'TERM' do |
|
34 |
+ puts 'Unicorn master intercepting TERM and sending myself QUIT instead' |
|
35 |
+ Process.kill 'QUIT', Process.pid |
|
36 |
+ end |
|
37 |
+ |
|
38 |
+ defined?(ActiveRecord::Base) and |
|
39 |
+ ActiveRecord::Base.connection.disconnect! |
|
40 |
+end |
|
41 |
+ |
|
42 |
+after_fork do |server, worker| |
|
43 |
+ Signal.trap 'TERM' do |
|
44 |
+ puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT' |
|
45 |
+ end |
|
46 |
+ |
|
47 |
+ defined?(ActiveRecord::Base) and |
|
48 |
+ ActiveRecord::Base.establish_connection |
|
49 |
+end |