1

いくつかの悪いコードに巻き込まれ、繰り返しフェイルオーバーした後、無限にrequeされているresqueジョブがあります。どういうわけか手動でジョブを削除したいのですが、redis名前空間にあるジョブの名前がわかりません。実際の例外をキャッチしているので、「失敗」ではありません。例外として、Resque.enqueue_in()を使用してジョブをresqueキューに追加し直します。キー/ジョブを削除できるように、ジョブの名前がredisにあることを確認するにはどうすればよいですか?

4

1 に答える 1

3

listレディスからメッセージを削除したい場合は、本質的にキューであるレディスをレスクポーリングし、これを試すことができます

require "rubygems"
require "redis"
require 'redis/namespace'
redis = Redis.new
namespace ||= :resque

@redis = Redis::Namespace.new(namespace, :redis => redis)
## If you dont know how does the job payload look like then find inside the list
## normally the payload look like this 
## {'class' => 'ProcessCSV' , args => ['1'] }.to_json.inpsect 
list_job_payloads = @redis.lrange "queue:[my queue name]",0,-1

## then finally remove from the list
@redis.lrem "queue:[my_queue_name]",0,value

しかし、より良いアプローチは、このような resque を介してジョブを削除することだと思います

以下がresqueによるredisリストへのジョブペイロードプッシュであることを考慮してください

 { 'class' => 'ProcessCSV', 'args' => ['1'] }

次に、次を使用してペイロードを削除できます

 Resque::Job.destroy(queue, 'ProcessCSV', '1')

ここでも詳しく説明しています

于 2012-12-13T08:06:25.470 に答える