我在Rails应用程序中使用sidekiq作为后台任务。现在工作的数量变得更多,所以我想清除所有的工作。我在控制台
中尝试了以下命令Sidekiq::Queue.new.clear
但它出现了以下错误。
NameError: uninitialized constant Sidekiq::Queue
如何清除sidekiq中的所有作业?
答案 0 :(得分:169)
您可以按照here for a stable version of accumarray或issue 1077
中的说明进行操作两者都建议我们执行以下操作,并且可以在rails控制台上完成:
Sidekiq.redis { |conn| conn.flushdb }
答案 1 :(得分:55)
根据Github上的这个问题:https://github.com/mperham/sidekiq/issues/1732你现在需要
require 'sidekiq/api'
答案 2 :(得分:55)
清除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 :(得分:19)
截至最新的Sidekiq,只是把它炸掉:
require 'sidekiq/api'
q = Sidekiq::Queue.new
q.
是的,清除所有的命令实际上是一个炸弹表情符号。也适用于Sidekiq::RetrySet
。
如果您没有乐趣,可以使用q.clear
答案 4 :(得分:15)
redis-cli flushdb
您也可以使用redis-cli flushall
答案 5 :(得分:7)
在一行中使用Rails运行器
rails runner 'Sidekiq.redis { |conn| conn.flushdb }'
答案 6 :(得分:2)
所有Sidekiq任务都保存在“ Redis”中。
您可以通过此命令清除“ Redis”
redis-cli flushall
答案 7 :(得分:1)
您可以使用它清除所有作业
require 'sidekiq/api'
Sidekiq::Queue.all.each(&:clear)
答案 8 :(得分: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和重要控制台命令的所有信息-https://medium.com/@shashwat12june/all-you-need-to-know-about-sidekiq-a4b770a71f8f
答案 9 :(得分:0)
require 'sidekiq/api'
Sidekiq::Queue.all.each {|x| x.clear}
答案 10 :(得分:0)
我意识到Sidekiq.redis { |conn| conn.flushdb }
从redis数据库中删除了所有密钥。有一种使用redis-cli
清除所有sidekiq队列的安全方法:
redis-cli keys "*queue:*" | xargs redis-cli del
Sidekiq API可以实现同样的目的(请参见Ravi Prakash Singh answer)