¿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?


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 }


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

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


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


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

10

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

Puedes limpiar "Redis" con este comando

redis-cli flushall

8

Puede usar esto para borrar todos los trabajos

require 'sidekiq/api'

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



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 )

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.