Resque/Clockwork を使用して、Heroku でバックグラウンド ジョブを実行しようとしています。
ローカルでは、ジョブは Clockwork によってキューに入れられ、Resque によって期待どおりに実行されます。Heroku では、うまくいくこともありますが、ほとんどの場合、Clockwork は期待どおりにジョブをキューに入れます。Resque で実行すると、「クラスにジョブが定義されていません」というエラーでジョブが失敗します。
Resque 管理パネルに表示される正確なエラーは次のとおりです。
Worker 960f8a1b-cce9-497a-a7ab-9b40c166a600:2+1 on FEATURED_CATALOG_ITEMS_CACHE at 27 minutes ago Retry or Remove
Class nil
Arguments nil
Exception Error
Error No job defined for class 'Workers::FeaturedCatalogItemsCacheWorker'
私のコードは次のようになります:
/app/models/workers/featured_catalog_items_cache_worker.rb
class Workers::FeaturedCatalogItemsCacheWorker
@queue = :featured_catalog_items_cache
def self.perform
p 'do work' # there is more code here but edited for brevity
end
end
/lib/clock.rb
require File.expand_path('../../config/boot', __FILE__)
require File.expand_path('../../config/environment', __FILE__)
require 'clockwork'
module Clockwork
every(2.minutes, 'Queueing FeaturedCatalogItemsCacheWorker job') { Resque.enqueue(Workers::FeaturedCatalogItemsCacheWorker) }
end
/lib/tasks/resque.rake
require 'resque/tasks'
task "resque:setup" => :environment do
ENV['QUEUE'] = '*'
end
プロフィール
web: rackup -p $PORT
resque: env TERM_CHILD=1 bundle exec rake resque:work
clock: bundle exec clockwork lib/clock.rb
何か不足していますか?