gpt4 book ai didi

ruby-on-rails - 清除 sidekiq 队列

转载 作者:行者123 更新时间:2023-12-03 05:19:59 24 4
gpt4 key购买 nike

我有一个永远运行的工作人员。

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。

最佳答案

通过删除队列来删除队列中的所有作业。

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

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

关于ruby-on-rails - 清除 sidekiq 队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23143766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com