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