3

私はいくつかのメソッドを実行するコードコードを持っており、そのメソッドを以下のようにself.perform内に配置しました

class StartWorker
@queue = :worker

 def self.perform
 puts "hello"
  Parser.find_all_by_class_name("Parser").first.sites.each do |s|
   site = Site.find(s.id)
   parser = Parser.new(site)
   parser.run
     end
     end
     end

def self.performとこれの終わりにコメントしてファイルを実行すると、目的の結果が正しく表示されますが、コメントを外してこれをバックグラウンドタスクとして配置しようとすると、何も表示されないresqueパネルにサイレントに失敗します。また、コマンドプロンプトに出力がありません

resque_schedule.yml内のresque-schedulerからこれをキューに入れています

start_worker:
cron: "55 6 * * *"
class: StartWorker
queue: worker
args:
description: "This job starts all the worker jobs"

def self.performメソッド内にいくつかの簡単なputsステートメントを入れて、コントロールがメソッド内を通過しているかどうかを確認しようとしましたが、コントロールがself.performメソッド内を通過していないようです。

また、rails環境をロードしようとしましたが、その中にresqueが必要でしたが、変更を加える前に、上記のすべてに対してbundle exec rake resque:work QUEUE='*'スクリプトを実行しました。

Railsコンソール内でResque.infoを試してみましたが、このように表示されています。

 {:working=>0, :queues=>1, :failed=>1, :environment=>"development", :servers=>["redis://localhost:6379/0"], :pending=>0, :processed=>1, :workers=>1}

これを克服する方法はありますか?

4

2 に答える 2

4
  1. resque-webパネルをチェックして、失敗したジョブが何であるかを確認しましたか?
  2. 変更後は必ずワーカーを再起動してください。
  3. ログのどこにも「hello」が表示されない場合(具体的にはlog / worker.logまたはログに記録する場所)、関数は単に実行されていません。
  4. bundle exec rake resque:work QUEUE='*'bundle exec rake resque:work QUEUE=* ワイルドカードを実際に引用した場合に備えて、そうする必要があります。
于 2012-05-30T08:59:24.667 に答える