Rails-3プロジェクトでResqueを使用して、5分ごとに実行するようにスケジュールされたジョブを処理しています。私は最近、これらのジョブの作成に大きな影響を与えました。スタックは1000以上のジョブをヒットしました。多くのジョブがキューに入れられる原因となった問題を修正しましたが、バグによって作成されたジョブがまだそこにあり、ジョブが1000以上のジョブを持つキューに追加されるため、何かをテストすることが困難になるという問題があります。私はこれらの仕事を止めることができないようです。 flushallコマンドを使用してredis-cliからキューを削除しようとしましたが、機能しませんでした。何か不足していますか? cozこれらの仕事を取り除く方法を見つけることができないようです。
Railsコンソールをポップオープンすると、次のコードを実行してキューをクリアできます。
queue_name = "my_queue"
Resque.redis.del "queue:#{queue_name}"
上記の答えから始めて、すべてのキューをクリアする必要がある場合は、以下を使用できます。
Resque.queues.each{|q| Resque.redis.del "queue:#{q}" }
Resqueには既にこれを行うためのメソッドがあります-Resque.remove_queue(queue_name)
を試してください(ドキュメントを参照してください here )。内部的にはResque.redis.del()
を実行しますが、他のクリーンアップも実行します。(resqueがどのように機能するかについての仮定を行うのではなく)apiメソッドを使用することで、より将来性のあるものになります。
クリアするための更新されたRakeタスク(最新のredisコマンドの変更による): https://Gist.github.com/122886
これは現在機能しています:
Resque.remove_queue("...")
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-削除する要素の数。
ResqueのRedisのすべてを削除するよりも、Resque APIを使用する方が安全で弾丸です。 Resqueは内部をいくらか掃除します。
allキューおよび関連するエンキューされたジョブを削除する場合:
Resque.queues.each {|queue| Resque.remove_queue(queue)}
キューは、次にジョブがエンキューされたときに再作成されます。