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?


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 }


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

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


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


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 }'

10

Alle Sidekiq-Aufgaben werden in "Redis" gespeichert.

Sie können "Redis" mit diesem Befehl bereinigen

redis-cli flushall

8

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

require 'sidekiq/api'

Sidekiq::Queue.all.each(&:clear)



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 ).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.