Як очистити всі завдання від Sidekiq?


119

Я використовую sidekiq для фонових завдань у додатку Rails. Зараз кількість робочих місць стає більше, тому я хочу очистити всі робочі місця. Я спробував наступну команду в консолі

Sidekiq::Queue.new.clear

але це дало наступну помилку.

NameError: uninitialized constant Sidekiq::Queue 

Як очистити всі завдання від sidekiq?


спробуйте include 'sidekiq'раніше
Бендж

@BenjaminSinclaire надає TypeError: неправильний аргумент типу String (очікуваний модуль)
Може

3
спробуйте require 'sidekiq'раніше
Урі Агассі

1
Я завжди (справді завжди) плутаю, включаю і вимагаю :)
Benj

Відповіді:



207

Ви можете зробити так, як сказано в питанні 1077 або як повідомляється в цьому блозі на noobsippets

Обидва пропонують зробити наступне, і це можна зробити на консолі рейки:

Sidekiq.redis { |conn| conn.flushdb }


Це здається, щоб скинути мою автентифікацію в додатках Rails, які я використовую (це означає, що я повинен копіювати файли cookie назад у свій клієнт HTTP). Чи є спосіб запобігти цьому?
intcreator

1
Привіт, Брандеамон. Ви використовуєте redis для контролю сеансу свого проекту? Оскільки ці команди призначені для "очищення" всіх даних, що зберігаються у "redis", це еквівалентно базі даних крапель або таблиці скидання у реляційних базах даних.
jonathanccalixto

1
Це має бути прийнята відповідь, враховуючи її голоси.
М. Хабіб

Це працює більш передбачувано, ніж redis-cli flushdbякщо ви запускаєте redis на окремому сервері від вашого сервера рейлів. Мені було цікаво, чому redis-cli flushdbне вийшло, поки я не згадав, що мені потрібно було включити аргументи хоста та порту.
maurice

4
Проблема такого підходу полягає в тому, що якщо ви обмінюєтесь однаковими програмами redis / elasticache у різних службах, він також очистить всі інші дані в redis db.
Карл Скарія

80

Очистити команди Sidekiq Jobs:

require 'sidekiq/api'

# Clear retry set

Sidekiq::RetrySet.new.clear

# Clear scheduled jobs 

Sidekiq::ScheduledSet.new.clear

# Clear 'Dead' jobs statistics

Sidekiq::DeadSet.new.clear

# Clear 'Processed' and 'Failed' jobs statistics

Sidekiq::Stats.new.reset

# Clear specific queue

stats = Sidekiq::Stats.new
stats.queues
# => {"main_queue"=>25, "my_custom_queue"=>1}

queue = Sidekiq::Queue.new('my_custom_queue')
queue.count
queue.clear

3
Ви також можете очистити всі черги за допомогою Sidekiq::Queue.all.map(&:clear)... Корисно, коли ви синхронізуєте локальний db з продуктом 😅
escanxr

36

Станом на останній Sidekiq, просто підірвіть його:

require 'sidekiq/api'

q = Sidekiq::Queue.new
q.💣

Так, команда очистити все - це буквально бомба емоді. Також працює для Sidekiq::RetrySet.

Або якщо вам не весело, ви можете використовувати q.clear


1
OMG, що за чорт це? @Xavier, чи є метод з назвою .💣, чи можете ви, будь ласка, вказувати мене на цей метод (💣).
кодемілан

2
@codemilan Дивіться цей запис у блозі: blog.honeybadger.io/…
Modus Tollens

Я потрапив invalid byte sequence in US-ASCII (ArgumentError)на виконання q.💣: /
Shankar Thyagarajan

21
redis-cli flushdb

Ви також можете використовувати redis-cli flushall


5
Проблема такого підходу полягає в тому, що якщо ви обмінюєтесь різними / elasticache різними службами, він також очистить всі інші дані в db.
Чарльз Скарія

13

Використовуйте бігун Rails в одному рядку

rails runner 'Sidekiq.redis { |conn| conn.flushdb }'



1

Якщо ви хочете видалити завдання з певних черг, спробуйте:

queue = Sidekiq::Queue.new("default")
queue.each do |job|
  job.klass # => 'TestWorker'
  job.args # => ['easy']
  job.delete if job.jid == 'abcdef1234567890' || job.klass == 'TestWorker'
end

Прочитайте все про sidekiq та важливі команди консолі - https://medium.com/@shashwat12june/all-you-need-to-know-about-sidekiq-a4b770a71f8f



0

Я зрозумів, що Sidekiq.redis { |conn| conn.flushdb }видаляє всі ключі з бази даних redis. Існує більш безпечний спосіб очищення всіх черг Sidekiq за допомогою redis-cli:

redis-cli keys "*queue:*" | xargs redis-cli del

Те саме можна досягти і з API Sidekiq (див. Відповідь Раві Пракаш Сінгха )

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.