Jak usunąć wszystkie prace z Sidekiqa?


119

Używam sidekiq do zadań w tle w aplikacji Rails. Teraz liczba miejsc pracy rośnie, więc chcę usunąć wszystkie zadania. Wypróbowałem następujące polecenie w konsoli

Sidekiq::Queue.new.clear

ale dawał następujący błąd.

NameError: uninitialized constant Sidekiq::Queue 

Jak usunąć wszystkie zadania z sidekiqa?


spróbuj include 'sidekiq'wcześniej
Benj

@BenjaminSinclaire podając TypeError: zły typ argumentu String (oczekiwany moduł)
Can Can

3
spróbuj require 'sidekiq'wcześniej
Uri Agassi

1
Zawsze (naprawdę zawsze) mylę uwzględnianie i wymagam :)
Benj

Odpowiedzi:



207

Możesz zrobić to, co mówi w sprawie 1077 lub jak opisano na tym blogu na noobsippets

Obaj sugerują wykonanie następujących czynności i można to zrobić na konsoli szynowej:

Sidekiq.redis { |conn| conn.flushdb }


Wygląda na to, że resetuje moje uwierzytelnianie w aplikacjach Railsowych, których używam (co oznacza, że ​​muszę skopiować pliki cookie z powrotem do mojego klienta HTTP). Czy jest sposób, aby temu zapobiec?
intcreator

1
Cześć, Brandeamon. Czy używasz redis do kontrolowania sesji swojego projektu? Ponieważ te polecenia mają na celu „wyczyszczenie” wszystkich danych przechowywanych w redis, jest to odpowiednik drop bazy danych lub drop table w relacyjnych bazach danych.
jonathanccalixto

1
To powinna być przyjęta odpowiedź, biorąc pod uwagę liczbę głosów.
M. Habib

Działa to bardziej przewidywalnie niż w redis-cli flushdbprzypadku uruchamiania redis na innym serwerze niż serwer railsowy. Zastanawiałem się, dlaczego redis-cli flushdbnie działa, dopóki nie przypomniałem sobie, że muszę dołączyć argumenty hosta i portu.
Maurice

4
Problem z tym podejściem polega na tym, że jeśli współdzielisz ten sam redis / elastache w różnych usługach, wyczyści to również wszystkie inne dane w bazie danych redis.
Charles Skariah

80

Wyczyść polecenia 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
Możesz także wyczyścić wszystkie kolejki za pomocą Sidekiq::Queue.all.map(&:clear)... Przydatne podczas synchronizowania bazy danych regionalnych z produktem 😅
escanxr

36

Od ostatniego Sidekiqa, po prostu wysadź to w powietrze:

require 'sidekiq/api'

q = Sidekiq::Queue.new
q.💣

Tak, polecenie wyczyszczenia wszystkiego jest dosłownie emoji bomby. Działa również dla Sidekiq::RetrySet.

Lub jeśli nie jesteś zabawny, możesz użyć q.clear


1
OMG, co to do cholery jest? @Xavier, czy istnieje metoda o nazwie .💣, czy możesz mi poprowadzić dokumentację dotyczącą tej metody (💣).
codemilan

2
@codemilan Zobacz ten wpis na blogu: blog.honeybadger.io/…
Modus

Zabrałem się invalid byte sequence in US-ASCII (ArgumentError)za wykonanie q.💣: /
Shankar Thyagarajan

21
redis-cli flushdb

Możesz także użyć redis-cli flushall


5
Problem z tym podejściem polega na tym, że jeśli udostępniasz ten sam redis / flexibleache w różnych usługach, wyczyści to również wszystkie inne dane w bazie danych.
Charles Skariah

13

Użyj prowadnicy Rails w jednej linii

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

10

Wszystkie zadania Sidekiq są zapisywane w „Redis”.

Za pomocą tego polecenia można wyczyścić „Redis”

redis-cli flushall




0

Zdałem sobie sprawę, że Sidekiq.redis { |conn| conn.flushdb }usuwa wszystkie klucze z bazy danych redis. Istnieje bezpieczniejszy sposób na wyczyszczenie wszystkich kolejek sidekiq za pomocą redis-cli:

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

To samo można osiągnąć dzięki Sidekiq API (patrz odpowiedź Ravi Prakash Singh )

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.