6

Resque 失敗キューを通過し、選択的にジョブを削除するコードを作成するにはどうすればよいですか? 今のところ、繰り返し実行されたランナウェイ ジョブからの何千もの失敗の間に、いくつかの重要な失敗が散在しています。暴走ジョブで生成されたものを削除したい。私がよく知っている唯一の API は、ジョブをキューに入れるためのものです。(RTFMing は続けますが、少し急いでいます。)

4

3 に答える 3

6

要求どおりに失敗キューを手動で変更できますが、ジョブが失敗したときにジョブを削除/再エンキューするカスタムの失敗ハンドラーを作成することをお勧めします。

基本的な失敗のバックエンドはここにあり、失敗したジョブを Hoptoad 例外追跡サービスに記録する実装はここにあります。

例えば:

module Resque
  module Failure
    class RemoveRunaways < Base
      def save
        i=0
        while job = Resque::Failure.all(i)
          # Selectively remove all MyRunawayJobs from failure queue whenever they fail
          if job.fetch('payload').fetch('class') == 'MyRunawayJob'
            remove(i) 
          else
            i = i + 1
          end
        end
      end
    end
  end
end

編集: 失敗を処理するためにこのバックエンドを指定する方法について言及するのを忘れていました。

Resque イニシャライザ (例: config/initializers/resque.rb) で:

# Use Resque Multi failure handler: standard handler and your custom handler
Resque::Failure::Multiple.classes = [Resque::Failure::Redis, Resque::Failure::RemoveRunaways]
Resque::Failure.backend = Resque::Failure::Multiple
于 2013-01-30T18:26:26.730 に答える