Wie lösche ich alle Jobs von Sidekiq?

118

Ich verwende Sidekiq für Hintergrundaufgaben in der Rails-Anwendung. Jetzt wird die Anzahl der Jobs größer, daher möchte ich alle Jobs löschen. Ich habe den folgenden Befehl in der Konsole versucht

Sidekiq::Queue.new.clear

aber es gab folgenden Fehler.

NameError: uninitialized constant Sidekiq::Queue 

Wie lösche ich alle Jobs von Sidekiq?

Can Can Can
quelle
versuchen Sie es include 'sidekiq'vorher
Benj
@BenjaminSinclaire gibt TypeError: falscher Argumenttyp String (erwartetes Modul)
Can Can
3
versuchen Sie es require 'sidekiq'vorher
Uri Agassi
1
Ich verwirre immer (wirklich immer) einschließen und fordern :)
Benj

Antworten:

206

Sie können tun, was in der Ausgabe 1077 steht oder wie in diesem Blog unter noobsippets berichtet

Beide schlagen vor, dass wir Folgendes tun und dies auf der Rails-Konsole tun können:

Sidekiq.redis { |conn| conn.flushdb }

jonathanccalixto
quelle
Dies scheint meine Authentifizierung für die von mir verwendeten Rails-Apps zurückzusetzen (was bedeutet, dass ich Cookies zurück in meinen HTTP-Client kopieren muss). Gibt es eine Möglichkeit, dies zu verhindern?
Intcreator
1
Hallo Brandeamon. Verwenden Sie Redis, um die Sitzung Ihres Projekts zu steuern? Da diese Befehle alle in redis gespeicherten Daten "bereinigen" sollen, entspricht dies einer Drop-Datenbank oder Drop-Tabelle in relationalen Datenbanken.
Jonathanccalixto
1
Dies sollte die akzeptierte Antwort sein, wenn man die Stimmen berücksichtigt.
M. Habib
Dies funktioniert vorhersehbarer als redis-cli flushdbwenn Sie Redis auf einem von Ihrem Rails-Server getrennten Server ausführen. Ich fragte mich, warum redis-cli flushdbes nicht funktionierte, bis ich mich daran erinnerte, dass ich Host- und Port-Argumente einschließen musste.
Maurice
4
Das Problem bei diesem Ansatz besteht darin, dass, wenn Sie denselben Redis / Elasticache für verschiedene Dienste verwenden, auch alle anderen Daten in der Redis-Datenbank gelöscht werden.
Charles Skariah
80

Sidekiq Jobs-Befehle löschen:

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
quelle
3
Sie können auch alle Warteschlangen löschen mit Sidekiq::Queue.all.map(&:clear)... Nützlich, wenn Sie Ihre Gebietsschema-Datenbank mit dem Produkt 😅
escanxr
36

Ab dem neuesten Sidekiq einfach in die Luft jagen:

require 'sidekiq/api'

q = Sidekiq::Queue.new
q.💣

Ja, der Befehl, alles zu löschen, ist buchstäblich ein Bomben-Emoji. Funktioniert auch für Sidekiq::RetrySet.

Oder wenn Sie keinen Spaß haben, können Sie verwenden q.clear

Xavier
quelle
1
OMG, was zum Teufel ist das? @ Xavier, gibt es eine Methode namens .💣, können Sie mir bitte das Dokument zu dieser Methode (guide) führen.
Codemilan
2
@codemilan Siehe diesen Blog-Beitrag: blog.honeybadger.io/…
Modus Tollens
Ich habe invalid byte sequence in US-ASCII (ArgumentError)ausgeführt q.💣: /
Shankar Thyagarajan
21
redis-cli flushdb

Sie können auch verwenden redis-cli flushall

Sai Ram Reddy
quelle
5
Das Problem bei diesem Ansatz besteht darin, dass alle anderen Daten in der Datenbank gelöscht werden, wenn Sie dieselbe Redis / Elasticache für verschiedene Dienste verwenden.
Charles Skariah
13

Verwenden Sie den Rails Runner in einer Zeile

rails runner 'Sidekiq.redis { |conn| conn.flushdb }'
Fangxing
quelle
10

Alle Sidekiq-Aufgaben werden in "Redis" gespeichert.

Sie können "Redis" mit diesem Befehl bereinigen

redis-cli flushall
Andriy Kondzolko
quelle
8

Sie können dies zum Löschen aller Jobs verwenden

require 'sidekiq/api'

Sidekiq::Queue.all.each(&:clear)
Ravi Prakash Singh
quelle
1
require 'sidekiq/api'

Sidekiq::Queue.all.each(&:clear)
Nicolás Schmidt Gubbins
quelle
Diese Antwort ist ein Duplikat von stackoverflow.com/a/56488682/3676469
Hirurg103
0

Mir wurde klar, dass Sidekiq.redis { |conn| conn.flushdb }alle Schlüssel aus der Redis-Datenbank entfernt werden. Es gibt eine sicherere Möglichkeit, alle Sidekiq-Warteschlangen zu löschen, indem Sie redis-cli:

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

Dasselbe kann mit der Sidekiq-API erreicht werden (siehe Antwort von Ravi Prakash Singh ).

Hirurg103
quelle