sidekiqキューをクリアする


93

私は永遠に走るこの労働者を持っています。

class Worker
  include Sidekiq::Worker
  sidekiq_options queue: "infinity", retry: true

  def perform(params)
    # ...
    self.class.perform_in(30.seconds, params)
  end
end

問題は、このように起動時にワーカーをロードすることです。 config/initializers/load_workers.rb

Rails.application.config.after_initialize do  
  if ENV["SIDEKIQ"] == "1"
    Worker.perform_async({})
  end
end

これを使用してsidekiqを開始しますSIDEKIQ=1 sidekiq --verbose --environment production -C config/sidekiq.yml

これは、現在実行中のワーカーと再スケジュールされているワーカーの両方で、古いワーカーが停止することを意味します。

起動時に(新しい作品をロードする直前に)これを実行しようとしましたが、うまくいきませんでした。

q = []
q += Sidekiq::RetrySet.new.select { |job| job.klass.match(/Worker/) }
q += Sidekiq::Queue.new("infinity").select { |job| job.klass.match(/Worker/) }
q += Sidekiq::ScheduledSet.new.select { |job| job.klass.match(/Worker/) }
q.each(&:delete)

5っぽいデプロイの後、後でスケジュールされたキューに多数の重複ワーカーがあります。それで、1つのキューのすべてをクリアし、すでに実行中のジョブが再スケジュールされないようにする方法はありますか?

sidekiq3.0を使用しています。


キューまたはスケジュールされたジョブを削除しますか。または、スケジュールされたジョブが重複していると言った方がよいでしょう。
Sabyasachi Ghosh 2014

新しいワーカーをロードする前に、ジョブのすべてのトレースを削除したいと思います。
Linus Oleander 2014

問題が発生しました..スケジュールされたすべてのジョブを削除することを意味します。
Sabyasachi Ghosh 2014

@haSabyasachiGhoshいいえ、スケジュールされたジョブだけでなく、キューに関連するすべてのものを削除したいと思います。言い換えると; 失敗した、進行中の、キューに入れられた、スケジュールされたジョブは削除する必要があります。
Linus Oleander 2014

-すべてのヘルプはここにあるgithub.com/mperham/sidekiq/wiki/API
viks

回答:


161

キューを削除して、キュー内のすべてのジョブを削除します。

require 'sidekiq/api' # for the case of rails console

Sidekiq::Queue.new("infinity").clear
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear

かもしれないSidekiq Proはあなたを助けるでしょう。
Ranjithkumar Ravi 2014

5
Sidekiq::Stats.new.resetこれが役立つことがわかったカウンターをクリアすることです

14
デフォルト/最初のキューをクリアするには:Sidekiq::Queue.all.first.clear
user456584 2015年

1
Sidekiq :: Queue.new( "reports")。clearおよびSidekiq :: Queue.new( "alerts")。clearは、現在のキューをクリアするのに役立ちます。しかし、ビジーはどうですか?「ビジー」ジョブをクリアするにはどうすればよいですか?
ドナート2015年

31
それらをすべてクリアするSidekiq::Queue.all.each &:clear
Marco Lazzeri 2015

95

これは私にとってトリックでした:

Sidekiq::Queue.all.each(&:clear)
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear
Sidekiq::DeadSet.new.clear

1
おかげで、これは私が(笑)、緊急にした魔法のように働いていた、相棒は私が探していたので、期待していたとして、これは働いていたキューにwaaaaaayあまりにも多くの労働者とあったkillようなコマンド
d1jhoni1b

完璧です。それを環境に追加するだけで、require 'sidekiq/api'コンソールで動作する必要がありました。
bonafernando

19

ほとんどのsidekiqバージョンで動作します:

Sidekiq::RetrySet.new.clear

Sidekiq::ScheduledSet.new.clear

統計のクリア(オプション)

Sidekiq::Stats.new.reset

これにより、キューだけでなくデータベース全体がフラッシュされます。
Linus Oleander 2017

sidekiqのすべてのデータベースをフラッシュし、Railsコンソールで
正常に動作する場合

-2

組み込みのメソッドがありますが、このコードを実行することでキューをクリアできます。

queue = Sidekiq::Queue.new
queue.each do |job|
  job.delete 
end

キューからすべてのジョブをフェッチしてから、それらを1つずつ削除したので、これは機能するはずです。
Asad Hameed 2018年

いいえ、そうではありません。既存の答えを見てください。これは、既存の回答の複製でもあります。
Linus Oleander 2018年

何を言っているのかわかりません。私が投稿したのと同じ答えを見せてくれませんか?
Asad Hameed 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.