Подтвердить что ты не робот

Очистить очередь sidekiq

У меня этот рабочий, который работает навсегда.

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-их развёртываний в очереди, запланированной позже, есть куча дубликатов рабочих. Итак, есть ли способ очистить все в одной очереди и предотвратить выполнение уже выполненных заданий после перенастройки?

Я использую sidekiq 3.0.

4b9b3361

Ответ 1

Удаляет все задания в очереди, удаляя очередь.

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

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

Ответ 2

Работает для меня для большинства версий sidekiq:

Sidekiq::RetrySet.new.clear

Sidekiq::ScheduledSet.new.clear

Очистить статистику (необязательно)

Sidekiq::Stats.new.reset

Ответ 3

Это сделало трюк для меня:

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

Ответ 4

Чтобы удалить все задания в очереди. Перейдите в консоль рельсов вашего производственного сервера и просто выполните следующую команду:

 Sidekiq::Queue.new.clear

Он уничтожит все заданные в очереди задания в sidekiq.