Если вы когда-либо использовали sidekiq (возможно, вместе с clockwork), вы должны знать, что если каким-то образом происходит сбой демона sidekiq и срабатывает рабочий процесс, задача поставлена в очередь (то есть для конфигурации по умолчанию). Теперь: что делать, если у вас была поминутная задача, sidekiq вылетает, а вы этого не замечали (или не могли среагировать) в течение часа? Это означает, что когда вы снова запустите sidekiq, он начнет с выполнения всех 60 задач, поставленных в очередь.
В моем случае у меня было приложение, с которым я просто дурачился; загрузите некоторые данные Blizzard с их серверов API, возитесь с ними, отображайте. Однако я еще не особо вникал в документацию sidekiq, так как копировал что-то вокруг, проверяя, как это работает и т. д.
Однако каким-то образом sidekiq произошел сбой, но часы продолжали работать; и поставил задачи в очередь. Их тоже много.
Когда я снова запустил демон sidekiq, все полетело к чертям. :) Все воркеры, стоявшие в очереди, разбежались; буквально рабочий флуд.
Итак, что было бы разумно сделать (на тот момент, в данном конкретном случае), или, по крайней мере, я придумал, как очистить очередь задач, которые не смогли запуститься.
Приступим к делу.
Доступ к товарам (консоль rails):
rails c
загрузить модуль API sidekiq
2.2.2 :001 > require 'sidekiq/api' => true
теперь давайте создадим совершенно новую, чистую очередь
2.2.2 :002 > Sidekiq::Queue.new.clear => [1, true]
Аааа вот и все. Никаких «устаревших» задач вокруг.
Конечно, лучшим решением было бы настроить clockwork таким образом, чтобы не ставить в очередь работников, пока не запущен sidekiq. Или просто заставить sidekiq очищать очередь при каждой загрузке.