Resque 2.0.0 は eager_loadしない
resque 2.0.0でのメインとなる変更は後方互換絶ちと思っていたら、
Only run eager_load! if Rails.application.config.eager_load is true という変更があり、実際に取り込んでみると意図しない影響を受けました。
rakeタスクでRailsアプリケーションをロードすると、 config.eager_loadを無効にするコールバックを挿入します。これによってrakeタスクの中からはconfig.eager_loadが常にfalseを返すのです。
ちなみに、このコールバックは不要なクラスのロードを避けて実行を速めるという意図があります。
2.0.0で取り込まれた Only run eager_load! if Rails.application.config.eager_load is true は、 「config.eager_loadを参照して実行時にeager_loadするかを選べる」という変更ですが、実際はrakeタスクでresqueを起動しているとeager_loadしなくなりました。
https://github.com/resque/resque/pull/1597
以前のようにeager_loadして欲しい時は下記rakeタスクの定義を行うとよいでしょう。
Rake::Task["resque:preload"].clear
task 'resque:preload' => :environment do |task|
ActiveSupport.run_load_hooks(:before_eager_load, Rails.application)
Rails.application.config.eager_load_namespaces.each(&:eager_load!)
end
-
category:
- ruby tags: