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