Come cancellare tutti i lavori da Sidekiq?


119

Sto usando sidekiq per attività in background nell'applicazione Rails. Ora il numero di lavori aumenta, quindi voglio cancellare tutti i lavori. Ho provato il seguente comando in console

Sidekiq::Queue.new.clear

ma stava dando il seguente errore.

NameError: uninitialized constant Sidekiq::Queue 

Come posso cancellare tutti i lavori da sidekiq?


prova include 'sidekiq'prima
Benj

@BenjaminSinclaire sta dando TypeError: tipo di argomento errato String (modulo previsto)
Can Can

3
prova require 'sidekiq'prima
Uri Agassi

1
Confondo sempre (davvero sempre) includo e richiedo :)
Benj

Risposte:



207

Puoi fare come dice sul numero 1077 o come riportato in questo blog su noobsippets

Entrambi suggeriscono di fare quanto segue e possono essere eseguiti su console rails:

Sidekiq.redis { |conn| conn.flushdb }


Questo sembra ripristinare la mia autenticazione sulle app Rails che sto utilizzando (il che significa che devo copiare nuovamente i cookie nel mio client HTTP). C'è un modo per impedirlo?
intcreator

1
Ciao, Brandeamon. Stai usando redis per controllare la sessione del tuo progetto? Poiché questi comandi servono per "pulire" tutti i dati archiviati in redis, è equivalente a un database di rilascio o a una tabella di rilascio nei database relazionali.
jonathanccalix al

1
Questa dovrebbe essere la risposta accettata considerando i suoi voti.
M. Habib

Funziona in modo più prevedibile rispetto a redis-cli flushdbse stai eseguendo redis su un server separato dal tuo server rails. Mi chiedevo perché redis-cli flushdbnon funzionasse finché non mi sono ricordato che dovevo includere gli argomenti host e port.
maurice

4
Il problema con questo approccio è che se si condivide lo stesso redis / elasticache su diversi servizi, verranno cancellati anche tutti gli altri dati nel database redis.
Charles Skariah

80

Comandi Clear 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
Puoi anche cancellare tutte le code con Sidekiq::Queue.all.map(&:clear)... Utile quando sincronizzi il tuo database locale con il prodotto 😅
escanxr

36

A partire dall'ultimo Sidekiq, fai saltare in aria:

require 'sidekiq/api'

q = Sidekiq::Queue.new
q.💣

Sì, il comando per cancellare tutto è letteralmente un'emoji bomba. Funziona anche per Sidekiq::RetrySet.

O se non sei divertente puoi usare q.clear


1
OMG, che diavolo è questo? @Xavier, c'è un metodo chiamato .💣, puoi guidarmi per favore il documento su questo metodo (💣).
codemilan

2
@codemilan Vedi questo post del blog: blog.honeybadger.io/…
Modus Tollens

Ho invalid byte sequence in US-ASCII (ArgumentError)eseguito q.💣: /
Shankar Thyagarajan il

21
redis-cli flushdb

Puoi anche usare redis-cli flushall


5
Il problema con questo approccio è che se si condivide lo stesso redis / elasticache su diversi servizi, verranno cancellati anche tutti gli altri dati nel database.
Charles Skariah

13

Usa Rails runner in una riga

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

10

Tutte le attività di Sidekiq vengono salvate in "Redis".

Puoi pulire "Redis" con questo comando

redis-cli flushall

8

Puoi usarlo per cancellare tutti i lavori

require 'sidekiq/api'

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



0

Mi sono reso conto che Sidekiq.redis { |conn| conn.flushdb }rimuove tutte le chiavi dal database redis. C'è un modo più sicuro per cancellare tutte le code di sidekiq usando redis-cli:

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

Lo stesso può essere ottenuto con l'API Sidekiq (vedi la risposta di Ravi Prakash Singh )

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.