sidekiqからすべてのジョブをクリアする方法?


118

Railsアプリケーションのバックグラウンドタスクにsidekiqを使用しています。仕事が増えたので、全部消したい。コンソールで次のコマンドを試しました

Sidekiq::Queue.new.clear

しかし、それは次のエラーを出していました。

NameError: uninitialized constant Sidekiq::Queue 

sidekiqからすべてのジョブをクリアするにはどうすればよいですか?


試すinclude 'sidekiq'前に
Benj

その与えTypeError例外を@BenjaminSinclaire:間違った引数の型文字列(予想モジュール)
ことができ

3
require 'sidekiq'以前に試す
Uri Agassi 14

1
私は常に(本当に)常にインクルードと要求を混同します:)
Benj

回答:



206

問題1077に記載されているように、またはこのブログのnoobsippetsで報告されているように行うことができます。

どちらも以下を実行することをお勧めします。これはRailsコンソールで実行できます。

Sidekiq.redis { |conn| conn.flushdb }


これにより、使用しているRailsアプリの認証がリセットされたようです(つまり、CookieをHTTPクライアントにコピーする必要があります)。それを防ぐ方法はありますか?
intcreator 2017年

1
こんにちは、ブランデーモン。プロジェクトのセッションを制御するためにredisを使用していますか?これらのコマンドはredisに格納されているすべてのデータを「クリーンアップ」するため、リレーショナルデータベースのドロップデータベースまたはドロップテーブルに相当します。
jonathanccalixto 2017年

1
これは、その投票を考慮すると、受け入れられる答えになるはずです。
M.ハビブ

これredis-cli flushdbは、railsサーバーとは別のサーバーでredisを実行している場合よりも予測どおりに機能します。redis-cli flushdbホストとポートの引数を含める必要があることを思い出すまで、なぜ動作しないのかと思っていました。
モーリス

4
このアプローチの問題は、異なるサービス間で同じredis / elasticacheを共有している場合、redis db内の他のすべてのデータもクリアすることです。
Charles Skariah、

80

Sidekiq Jobsコマンドをクリアします。

require 'sidekiq/api'

# Clear retry set

Sidekiq::RetrySet.new.clear

# Clear scheduled jobs 

Sidekiq::ScheduledSet.new.clear

# Clear 'Dead' jobs statistics

Sidekiq::DeadSet.new.clear

# Clear 'Processed' and 'Failed' jobs statistics

Sidekiq::Stats.new.reset

# Clear specific queue

stats = Sidekiq::Stats.new
stats.queues
# => {"main_queue"=>25, "my_custom_queue"=>1}

queue = Sidekiq::Queue.new('my_custom_queue')
queue.count
queue.clear

3
あなたはまたしてすべてのキューをクリアすることができSidekiq::Queue.all.map(&:clear)ますが、PRODとロケールデシベルを同期するとき😅...便利
escanxr

36

最新のSidekiqの時点で、それを爆破するだけです:

require 'sidekiq/api'

q = Sidekiq::Queue.new
q.💣

はい、すべてをクリアするコマンドは文字通り爆弾の絵文字です。でも動作しSidekiq::RetrySetます。

または、あなたが楽しくなければあなたは使うことができます q.clear


1
OMG、一体これは何ですか?@ Xavier、.💣という名前のメソッドはありますか、このメソッド(💣)に関するドキュメントを私に案内してください。
codemilan 2018年

2
このブログ記事を参照してください@codemilan:blog.honeybadger.io/...
モーダストレンス

私はinvalid byte sequence in US-ASCII (ArgumentError)実行に乗りましたq.💣:/
シャンカールThyagarajan

21
redis-cli flushdb

あなたも使うことができます redis-cli flushall


5
このアプローチの問題は、異なるサービス間で同じredis / elasticacheを共有している場合、データベース内の他のすべてのデータもクリアすることです。
Charles Skariah、




1

特定のキューからジョブを削除する場合は、次のことを試してください。

queue = Sidekiq::Queue.new("default")
queue.each do |job|
  job.klass # => 'TestWorker'
  job.args # => ['easy']
  job.delete if job.jid == 'abcdef1234567890' || job.klass == 'TestWorker'
end

sidekiqと重要なコンソールについてのすべてを読むcommands- https://medium.com/@shashwat12june/all-you-need-to-know-about-sidekiq-a4b770a71f8f



0

私はそれがSidekiq.redis { |conn| conn.flushdb }すべてのキーをredisデータベースから削除することに気づきました。を使用してすべてのsidekiqキューをクリアするより安全な方法がありますredis-cli

redis-cli keys "*queue:*" | xargs redis-cli del

Sidekiq APIでも同じことができます(Ravi Prakash Singhの回答を参照)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.