0

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

何か不足していますか?

4

1 に答える 1

-1

たぶん/lib/clock.rb

require 'Workers::FeaturedCatalogItemsCacheWorker'

解決 :

「./config/boot」が必要 「./config/environment」が必要です 「時計仕掛け」が必要 「レスキュー」が必要

モジュール時計仕掛け

ハンドラーは|ジョブ|を行います puts "実行中のジョブ: #{job}" Resque.enqueue(ジョブ) 終わり

every(15.minutes, NewsRssReader ) 終わり

于 2014-08-27T08:55:36.443 に答える