如何清除sidekiq的所有作业?


118

我正在用sidekiq进行Rails应用程序中的后台任务。现在工作数量增加了,所以我想清除所有工作。我在控制台中尝试了以下命令

Sidekiq::Queue.new.clear

但它给出了以下错误。

NameError: uninitialized constant Sidekiq::Queue 

如何清除sidekiq的所有作业?


include 'sidekiq'在此之前尝试
Benj 2014年

@BenjaminSinclaire其给出的TypeError:错误的参数类型字符串(预期的模块)
Can Can Can

3
require 'sidekiq'在此之前尝试
Uri Agassi 2014年

1
我总是(真的总是)混淆包含和要求:)
Benj 2014年

Answers:



206

您可以按照问题1077的说明进行操作,也可以按照此报告中的操作进行操作博客在noobsippets上的进行操作

两者都建议我们执行以下操作,并且可以在rails控制台上完成:

Sidekiq.redis { |conn| conn.flushdb }


这似乎重置了我正在使用的Rails应用程序上的身份验证(这意味着我必须将cookie复制回我的HTTP客户端)。有办法防止这种情况吗?
intcreator

1
您好,Brandeamon。您是否正在使用Redis来控制项目的会话?因为这些命令用于“清除” redis中存储的所有数据,所以它等效于关系数据库中的放置数据库或放置表。
jonathanccalixto

1
考虑到它的投票,这应该是公认的答案。
哈比卜

redis-cli flushdb与在与Rails服务器不同的服务器上运行Redis 相比,这更可预测。我想知道为什么redis-cli flushdb在我需要添加主机和端口参数之前为什么不起作用。
莫里斯

4
这种方法的问题是,如果您要在不同的服务之间共享相同的redis / elasticache,它将同时清除redis数据库中的所有其他数据。
查尔斯斯卡里亚

80

清除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
您还可以使用Sidekiq::Queue.all.map(&:clear)... 清除所有队列。当您将区域数据库与产品sync同步时很有用
escanxr

36

作为最新的Sidekiq,只需将其炸掉即可:

require 'sidekiq/api'

q = Sidekiq::Queue.new
q.💣

是的,清除所有内容的命令实际上是炸弹表情符号。也适用于Sidekiq::RetrySet

或者,如果您没有乐趣,可以使用 q.clear


1
天哪,这到底是什么?@Xavier,是否有一个名为.💣的方法,能否请您指导我有关此方法的文档(💣)。
codemilan

2
:@codemilan看到这个博客帖子blog.honeybadger.io/...
否定后件

我开始invalid byte sequence in US-ASCII (ArgumentError)执行q.💣:/
Shankar Thyagarajan,


13

在一行中使用RailsRunner

rails runner 'Sidekiq.redis { |conn| conn.flushdb }'





0

我意识到这Sidekiq.redis { |conn| conn.flushdb }会从Redis数据库中删除所有密钥。有一种使用redis-cli以下方法清除所有sidekiq队列的安全方法:

redis-cli keys "*queue:*" | xargs redis-cli del

使用Sidekiq API可以实现相同的效果(请参阅Ravi Prakash Singh答案

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.