我正在Rails应用中使用Sidekiq执行后台任务。现在作业数量变得更多了,所以我想清除所有的作业。我在控制台中尝试了以下命令:
Sidekiq::Queue.new.clear
但它会报以下错误。NameError: uninitialized constant Sidekiq::Queue
我该如何清除 Sidekiq 中的所有任务?
我正在Rails应用中使用Sidekiq执行后台任务。现在作业数量变得更多了,所以我想清除所有的作业。我在控制台中尝试了以下命令:
Sidekiq::Queue.new.clear
但它会报以下错误。NameError: uninitialized constant Sidekiq::Queue
我该如何清除 Sidekiq 中的所有任务?
您可以按照issue 1077中的说明,或者按照此noobsippets博客中所述进行操作。
两种方法都建议我们执行以下操作,可以在Rails控制台上完成:
Sidekiq.redis(&:flushdb)
警告:这个命令会清除所有Redis记录。我建议不要在生产中使用它。
另一种方法是
redis-cli --scan --pattern users: * | xargs redis-cli del
根据这篇博客的说法。清除 Sidekiq 任务的命令:
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 all queues
Sidekiq::Queue.all.map(&:clear)
# 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
Sidekiq::Queue.all.map(&:clear)
清除所有队列... 当您将本地数据库与生产环境同步时很有用。 - cercxtrovarequire 'sidekiq/api'
最新版的Sidekiq已经可以直接使用了:
require 'sidekiq/api'
q = Sidekiq::Queue.new
q.
是的,清除所有内容的命令就是一个炸弹表情符号。也适用于Sidekiq::RetrySet
。
或者,如果你不想有趣的话,你可以使用q.clear
。
q.
时,我遇到了 invalid byte sequence in US-ASCII (ArgumentError)
的错误 :/ - Shankar Thyagarajanredis-cli flushdb
你也可以使用redis-cli flushall
在一行中使用Rails runner
rails runner 'Sidekiq.redis { |conn| conn.flushdb }'
require 'sidekiq/api'
Sidekiq::Queue.all.each(&:clear)
require 'sidekiq/api'
Sidekiq::Queue.all.each {|x| x.clear}
所有的Sidekiq任务都保存在"Redis"中。
您可以使用此命令清除"Redis"。
redis-cli flushall
虽然这方面有很多方法已经在其他答案中得到了详细记录,但是当您遇到 Redis::CommandError (OOM command not allowed when used memory > 'maxmemory'.)
错误时,Sidekiq::Queue#clear
无法执行。在这种情况下,您仍然可以单独从问题队列中删除记录,直到内存足够清除方法能够正常工作。例如,在Rails控制台中,以下操作对我有效:
problem_queue_name = 'my_big_queue'
queue = Sidekiq::Queue.new(problem_queue_name)
# Alternate between deleting jobs in a batch and attempting clear until it succeeds
queue.first(10000).each do |q| print('.') if q.delete end; nil
queue.clear
include 'sidekiq'
。 - Benjrequire 'sidekiq'
。 - Uri Agassi