¿Cómo borrar todos los trabajos de sidekiq?

118

Estoy usando sidekiq para tareas en segundo plano en la aplicación Rails. Ahora la cantidad de trabajos aumenta, así que quiero borrar todos los trabajos. Probé el siguiente comando en la consola

Sidekiq::Queue.new.clear

pero estaba dando el siguiente error.

NameError: uninitialized constant Sidekiq::Queue 

¿Cómo borro todos los trabajos de sidekiq?

Can Can
fuente
probar include 'sidekiq'antes
Benj
@BenjaminSinclaire está dando TypeError: tipo de argumento incorrecto String (módulo esperado)
Can Can
3
probar require 'sidekiq'antes
Uri Agassi
1
Siempre (realmente siempre) confundo incluir y requerir :)
Benj

Respuestas:

206

Puede hacer lo que dice sobre el problema 1077 o como se informa en este blog en noobsippets

Ambos sugieren que hagamos lo siguiente, y se puede hacer en la consola de rieles:

Sidekiq.redis { |conn| conn.flushdb }

jonathanccalixto
fuente
Esto parece restablecer mi autenticación en las aplicaciones Rails que estoy usando (lo que significa que tengo que copiar las cookies de nuevo en mi cliente HTTP). Hay alguna manera de prevenir eso?
intcreator
1
Hola, Brandeamon. ¿Estás usando redis para controlar la sesión de tu proyecto? Debido a que estos comandos son para "limpiar" todos los datos almacenados en redis, es equivalente a eliminar una base de datos o una tabla de eliminación en bases de datos relacionales.
jonathanccalixto
1
Esta debería ser la respuesta aceptada considerando sus votos.
M. Habib
Esto funciona de manera más predecible que redis-cli flushdbsi está ejecutando redis en un servidor separado de su servidor rails. Me preguntaba por qué redis-cli flushdbno funcionó hasta que recordé que necesitaba incluir argumentos de host y puerto.
maurice
4
El problema con este enfoque es que si está compartiendo el mismo redis / elasticache en diferentes servicios, también borrará todos los demás datos en la base de datos de redis.
Charles Skariah
80

Borrar comandos de trabajos de Sidekiq:

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
fuente
3
También puede borrar todas las colas con Sidekiq::Queue.all.map(&:clear)... Útil cuando sincroniza su base de datos local con el prod 😅
escanxr
36

A partir del último Sidekiq, hazlo explotar:

require 'sidekiq/api'

q = Sidekiq::Queue.new
q.💣

Sí, el comando para borrar todo es literalmente un emoji de bomba. También funciona para Sidekiq::RetrySet.

O si no eres divertido, puedes usar q.clear

Javier
fuente
1
Dios mío, ¿qué diablos es esto? @Xavier, ¿hay un método llamado .💣, puede guiarme con el documento sobre este método (💣).
codemilan
2
@codemilan Vea esta publicación de blog: blog.honeybadger.io/…
Modus Tollens
Empecé invalid byte sequence in US-ASCII (ArgumentError)a ejecutar q.💣: /
Shankar Thyagarajan
21
redis-cli flushdb

También puedes usar redis-cli flushall

Sai Ram Reddy
fuente
5
El problema con este enfoque es que si está compartiendo el mismo redis / elasticache en diferentes servicios, también borrará todos los demás datos en la base de datos.
Charles Skariah
13

Utilice el corredor Rails en una línea

rails runner 'Sidekiq.redis { |conn| conn.flushdb }'
fangxing
fuente
10

Todas las tareas de Sidekiq se guardan en "Redis".

Puedes limpiar "Redis" con este comando

redis-cli flushall
Andriy Kondzolko
fuente
8

Puede usar esto para borrar todos los trabajos

require 'sidekiq/api'

Sidekiq::Queue.all.each(&:clear)
Ravi Prakash Singh
fuente
0

Me di cuenta de que Sidekiq.redis { |conn| conn.flushdb }elimina todas las claves de la base de datos de redis. Existe una forma más segura de borrar todas las colas de sidekiq usando redis-cli:

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

Lo mismo se puede lograr con la API de Sidekiq (consulte la respuesta de Ravi Prakash Singh )

Hirurg103
fuente