我有一个永远在运行的工人。
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-ish部署之后,队列中有一堆重复的工作进程。那么,有没有一种方法可以清除一个队列中的所有内容,并防止已经在运行的作业重新调度?
我使用的是sidekiq 3.0。
发布于 2014-05-15 18:17:15
通过删除队列来删除队列中的所有作业。
require 'sidekiq/api' # for the case of rails console
Sidekiq::Queue.new("infinity").clear
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear发布于 2017-11-15 00:03:23
这将清除所有队列、计划和重试:
require 'sidekiq/api'
Sidekiq::Queue.all.each(&:clear)
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear
Sidekiq::DeadSet.new.clear发布于 2016-07-30 17:00:26
适用于我的大多数sidekiq版本:
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear清除统计信息(可选)
Sidekiq::Stats.new.resethttps://stackoverflow.com/questions/23143766
复制相似问题