У меня есть работа по поиску, которая попала в какой-то плохой код и бесконечно получает запрос после неудачного повторения. Я хотел бы как-то удалить задание вручную, но я не уверен, что имя задания находится в пространстве имен redis. Это не «неудачно», потому что я уловил фактическое исключение. В исключении я добавляю задание обратно в очередь resque, используя Resque.enqueue_in(). Как определить, что имя задания указано в redis, чтобы я мог удалить ключ/работу из когда-либо?Локализация и удаление отложенного задания resque
0
A
ответ
2
Resque опрашивать Redis list
, что по существу очередь, если вы хотите удалить сообщение из Redis, то вы можете попробовать этот
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 как это
Учитывая, что ниже задания полезной нагрузки толчок к списку REDIS по Resque
{ 'class' => 'ProcessCSV', 'args' => ['1'] }
Затем вы можете удалить плату нагрузка с использованием
Resque::Job.destroy(queue, 'ProcessCSV', '1')
Он также более подробно описать более here