ActiveJob の設定に関する雑なメモ。
ActiveJob を使う際にqueue_adapter
を以下のような感じで設定してしまうと、production環境であるにも関わらずアダプターが:async
になってしまう場合がある。(なぜか上手くいく場合もあるので厄介)
config/initializers/sidekiq.rb
case Rails.env
when 'production'
Rails.application.config.active_job.queue_adapter = :sidekiq
else
Rails.application.config.active_job.queue_adapter = :async
end
理由は以下の記事が詳しいが、
簡単に説明すると、Railsの初期化時にRailtie#initializer
がconfig/initializers/*.rb
よりも先に走ってしまうことで、queue_adapter
が設定されていない場合のデフォルトである:async
(Rails4.xであれば:inline
) が設定されてしまう、ということみたい。
環境ごとに書き換えたいならconfig/environments/*.rb
に書こう。(ちゃんとコメントが書いてある。)
# Use a real queuing backend for Active Job (and separate queues per environment)
# config.active_job.queue_adapter = :resque
# config.active_job.queue_name_prefix = "application_#{Rails.env}"