Iva*_*var 2 ruby redis sidekiq
我不小心把一堆工作留在了Sidekiq。我不想擦除我的整个Redis存储(并将所有Sidekiq数据和排队的作业重置为nil),但是我想删除可以由给定类识别的所有排队的作业。我该怎么做?
我发现Sidekiq API提供了一种执行所需功能的简便方法:
queue = Sidekiq::Queue.new(queue_name)
queue.each do |job|
puts job.klass
job.delete if job.klass == job_class
end
Run Code Online (Sandbox Code Playgroud)
这些答案很有帮助,但没有回答我最初的问题。这些解决方案可能已经过时。
您必须访问作业的 args 并在循环范围内获取它的实际作业类。我尝试了上述方法,但没有按预期工作,因为job.klass没有返回您期望的结果。
这是它当前在终端中返回的内容:
queue.each do |job|
puts job.klass
end
ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper
=> nil
Run Code Online (Sandbox Code Playgroud)
所以我的解决方案是像这样深入研究工作的论点:
queue = Sidekiq::Queue.new(“job_queue_name”)
queue.each do |job|
puts job.args.first['job_class']
job.delete if job.args.first['job_class'] == "Things::DoesThatThingJob"
end
Run Code Online (Sandbox Code Playgroud)
我确信有一种方法可以更优雅地编写它(也许使用选择?)但它是可读的。希望我能够帮助像我这样正在寻找这样的东西的人。