如何清除sidekiq的所有工作?

时间:2014-07-22 11:37:30

标签: ruby-on-rails ruby sidekiq

我在Rails应用程序中使用sidekiq作为后台任务。现在工作的数量变得更多,所以我想清除所有的工作。我在控制台

中尝试了以下命令
Sidekiq::Queue.new.clear

但它出现了以下错误。

NameError: uninitialized constant Sidekiq::Queue 

如何清除sidekiq中的所有作业?

11 个答案:

答案 0 :(得分:169)

您可以按照here for a stable version of accumarrayissue 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