web-dev-qa-db-ja.com

resqueワーカーによってキューに入れられたジョブを破棄する方法は?

Rails-3プロジェクトでResqueを使用して、5分ごとに実行するようにスケジュールされたジョブを処理しています。私は最近、これらのジョブの作成に大きな影響を与えました。スタックは1000以上のジョブをヒットしました。多くのジョブがキューに入れられる原因となった問題を修正しましたが、バグによって作成されたジョブがまだそこにあり、ジョブが1000以上のジョブを持つキューに追加されるため、何かをテストすることが困難になるという問題があります。私はこれらの仕事を止めることができないようです。 flushallコマンドを使用してredis-cliからキューを削除しようとしましたが、機能しませんでした。何か不足していますか? cozこれらの仕事を取り除く方法を見つけることができないようです。

40
Kibet Yegon

Railsコンソールをポップオープンすると、次のコードを実行してキューをクリアできます。

queue_name = "my_queue"
Resque.redis.del "queue:#{queue_name}"
50
Dylan Markow

上記の答えから始めて、すべてのキューをクリアする必要がある場合は、以下を使用できます。

Resque.queues.each{|q| Resque.redis.del "queue:#{q}" }
65
shedd

Resqueには既にこれを行うためのメソッドがあります-Resque.remove_queue(queue_name)を試してください(ドキュメントを参照してください here )。内部的にはResque.redis.del()を実行しますが、他のクリーンアップも実行します。(resqueがどのように機能するかについての仮定を行うのではなく)apiメソッドを使用することで、より将来性のあるものになります。

35
iainbeeston

クリアするための更新されたRakeタスク(最新のredisコマンドの変更による): https://Gist.github.com/122886

14
denmarkin

これは現在機能しています:

Resque.remove_queue("...")
13
vladCovaliov

Redisコンソールに入る:

redis-cli

データベースのリスト:

127.0.0.1:6379> KEYS *
 1) "resque:schedules_changed"
 2) "resque:workers"
 3) "resque:queue:your_overloaded_queue"

"resque:queue:your_overloaded_queue"-必要なdb。

次に実行します:

DEL resque:queue:your_overloaded_queue

または、キュー内の指定されたジョブを削除する場合は、 LRANGE コマンドを使用してdbからいくつかの値をリストします。

127.0.0.1:6379> LRANGE resque:queue:your_overloaded_queue 0 2
1) "{\"class\":\"AppClass\",\"args\":[]}"
2) "{\"class\":\"AppClass\",\"args\":[]}"
3) "{\"class\":\"AppClass\",\"args\":[]}"

次に、1つの値をコピーして LREM コマンドに貼り付けます。

127.0.0.1:6379> LREM resque:queue:your_overloaded_queue 5 "{\"class\":\"AppClass\",\"args\":[]}"
(integer) 5

場所5-削除する要素の数。

4
hlcs

ResqueのRedisのすべてを削除するよりも、Resque APIを使用する方が安全で弾丸です。 Resqueは内部をいくらか掃除します。

allキューおよび関連するエンキューされたジョブを削除する場合:

Resque.queues.each {|queue| Resque.remove_queue(queue)}

キューは、次にジョブがエンキューされたときに再作成されます。

ドキュメント

1
Erowlin