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?

Może może
źródło
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 }

jonathanccalixto
źródło
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
rusllonrails
źródło
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

Xavier
źródło
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

Sai Ram Reddy
źródło
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 }'
fangxing
źródło
10

Wszystkie zadania Sidekiq są zapisywane w „Redis”.

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

redis-cli flushall
Andriy Kondzolko
źródło
8

Możesz użyć tego do usunięcia wszystkich zadań

require 'sidekiq/api'

Sidekiq::Queue.all.each(&:clear)
Ravi Prakash Singh
źródło
1
require 'sidekiq/api'

Sidekiq::Queue.all.each(&:clear)
Nicolás Schmidt Gubbins
źródło
Ta odpowiedź jest duplikatem strony stackoverflow.com/a/56488682/3676469
Hirurg103
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 )

Hirurg103
źródło