私のサイトでは、Heroku で Unicorn サーバーと Delayed_Job を正常に使用しています。ただし、それが最善の方法でセットアップされているかどうかは不明であり、ワーカープロセスの表示方法などに関する詳細情報を取得したいと考えています。動作する config/unicorn.rb ファイルを以下に貼り付けます。
worker_processes 3
preload_app true
timeout 30
# setting the below code because of the preload_app true setting above:
# http://unicorn.bogomips.org/Unicorn/Configurator.html#preload_app-method
@delayed_job_pid = nil
before_fork do |server, worker|
if defined?(ActiveRecord::Base)
ActiveRecord::Base.connection.disconnect!
Rails.logger.info('Disconnected from ActiveRecord')
# start the delayed_job worker queue in Unicorn, use " -n 2 " to start 2 workers
if Rails.env == "production"
# @delayed_job_pid ||= spawn("RAILS_ENV=production ../script/delayed_job start")
# @delayed_job_pid ||= spawn("RAILS_ENV=production #{Rails.root.join('script/delayed_job')} start")
@delayed_job_pid ||= spawn("bundle exec rake jobs:work")
elsif Rails.env == "development"
@delayed_job_pid ||= spawn("script/delayed_job start")
# @delayed_job_pid ||= spawn("rake jobs:work")
end
end
end
after_fork do |server, worker|
if defined?(ActiveRecord::Base)
ActiveRecord::Base.establish_connection
Rails.logger.info('Connected to ActiveRecord')
end
end
- delayed_job は
RAILS_ENV=production script/delayed_job start
、プロダクション モードでワーカー プロセスを開始するために使用するように指示されていますが、このコマンドを使用すると、Heroku で「ファイルが見つかりません」というエラーが発生します。それで、今のところ私はbundle exec rake jobs:work
本番環境で使用していますが、これはうまくいくようですが、これは正しいですか? - このセットアップで実際に実行されているプロセスの数は? 私の推測では、Unicorn マスター プロセスが 1 つ、Web ワーカーが 3 つ、遅延ジョブ ワーカーが 1 つ、合計 5 つでしょうか。ローカルで dev モードで実行すると、5 つの ruby pid が生成されていることがわかります。おそらく、2 つの Web ワーカーのみを使用し、Delayed_job に 2 つのワーカーを与える方がよいでしょう (トラフィックがかなり少ない)。
- これらはすべて単一の Heroku dyno で実行されるため、Unicorn ワーカーのステータスを確認する方法がわかりません。
**注、Heroku が「ファイルが見つからない」と言っているため、本番環境でサイトを壊す行をコメントアウトしました