找到并删除延迟的resque作业

时间:2012-12-10 17:16:41

标签: ruby-on-rails ruby resque

我有一个resque工作,它被一些糟糕的代码所困扰,并且在重复故障后无限期地被重新加入。我想以某种方式手动删除该作业,但我不确定该作业的名称在redis名称空间中是什么。它不是'失败',因为我抓住了实际的异常。在异常中,我使用Resque.enqueue_in()将作业添加回resque队列。我怎么弄清楚redis中的工作名称是什么,这样我就可以删除关键/工作?

1 个答案:

答案 0 :(得分:2)

如果您要从redis中删除邮件,则resque轮询redis list本质上是队列,然后您可以尝试此操作

require "rubygems"
require "redis"
require 'redis/namespace'
redis = Redis.new
namespace ||= :resque

@redis = Redis::Namespace.new(namespace, :redis => redis)
## If you dont know how does the job payload look like then find inside the list
## normally the payload look like this 
## {'class' => 'ProcessCSV' , args => ['1'] }.to_json.inpsect 
list_job_payloads = @redis.lrange "queue:[my queue name]",0,-1

## then finally remove from the list
@redis.lrem "queue:[my_queue_name]",0,value

但我想更好的方法是通过resque这样删除作业

考虑到以下是通过resque

推送到redis列表的作业有效负载
 { 'class' => 'ProcessCSV', 'args' => ['1'] }

然后您可以使用

删除有效负载
 Resque::Job.destroy(queue, 'ProcessCSV', '1')

它还详细描述了here