Я использую Resque в проекте rails-3 для обработки заданий, которые планируется запустить каждые 5 минут. Недавно я сделал что-то, что ускорило создание этих заданий, и в стек попало более 1000 рабочих мест. Я исправил проблему, вызвавшую то, что многие задания были поставлены в очередь, и теперь проблема заключается в том, что задания, созданные этой ошибкой, все еще существуют, и поэтому становится сложно проверить что-то, поскольку задание добавляется в очередь с 1000+ заданиями. Я не могу остановить эту работу. Я попытался удалить очередь из redis-cli с помощью команды flushall, но это не сработало. Я что-то упускаю? Мне кажется, я не могу найти способ избавиться от этих заданий.
Как уничтожить рабочие места, выставленные рабочими-спасателями?
Ответ 1
Если вы открываете консоль рельсов, вы можете запустить этот код, чтобы очистить свою очередь (-ы):
queue_name = "my_queue"
Resque.redis.del "queue:#{queue_name}"
Ответ 2
Воспроизведение вышеуказанных ответов, если вам нужно очистить все ваши очереди, вы можете использовать следующее:
Resque.queues.each{|q| Resque.redis.del "queue:#{q}" }
Ответ 3
У Resque уже есть способ для этого - попробуйте Resque.remove_queue(queue_name)
(см. документацию здесь). Внутри он выполняет Resque.redis.del()
, но также выполняет другую очистку, и, используя метод api (вместо того, чтобы делать предположения о том, как работает resque), вы будете более надежны в будущем.
Ответ 4
Обновлена задача rake для очистки (в соответствии с последними изменениями команды redis): https://gist.github.com/1228863
Ответ 5
Это то, что работает сейчас:
Resque.remove_queue("...")
Ответ 6
Введите консоль redis:
redis-cli
Список баз данных:
127.0.0.1:6379> KEYS *
1) "resque:schedules_changed"
2) "resque:workers"
3) "resque:queue:your_overloaded_queue"
"resque:queue:your_overloaded_queue"
- db, который вам нужен.
Затем запустите:
DEL resque:queue:your_overloaded_queue
Или, если вы хотите удалить заданные задания в очереди, перечислите несколько значений из db с помощью команды LRANGE
:
127.0.0.1:6379> LRANGE resque:queue:your_overloaded_queue 0 2
1) "{\"class\":\"AppClass\",\"args\":[]}"
2) "{\"class\":\"AppClass\",\"args\":[]}"
3) "{\"class\":\"AppClass\",\"args\":[]}"
Затем скопируйте/вставьте одно значение в команду LREM
:
127.0.0.1:6379> LREM resque:queue:your_overloaded_queue 5 "{\"class\":\"AppClass\",\"args\":[]}"
(integer) 5
Где 5 - количество элементов для удаления.