Подтвердить что ты не робот

Как уничтожить рабочие места, выставленные рабочими-спасателями?

Я использую Resque в проекте rails-3 для обработки заданий, которые планируется запустить каждые 5 минут. Недавно я сделал что-то, что ускорило создание этих заданий, и в стек попало более 1000 рабочих мест. Я исправил проблему, вызвавшую то, что многие задания были поставлены в очередь, и теперь проблема заключается в том, что задания, созданные этой ошибкой, все еще существуют, и поэтому становится сложно проверить что-то, поскольку задание добавляется в очередь с 1000+ заданиями. Я не могу остановить эту работу. Я попытался удалить очередь из redis-cli с помощью команды flushall, но это не сработало. Я что-то упускаю? Мне кажется, я не могу найти способ избавиться от этих заданий.

4b9b3361

Ответ 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 - количество элементов для удаления.