ruby-on-rails-3 - stop - sidekiq command line
¿Cómo destruir los trabajos puestos en cola por los trabajadores de resque? (7)
Estoy usando Resque en un proyecto de rails-3 para manejar trabajos que están programados para ejecutarse cada 5 minutos. Hace poco hice algo que hizo crecer la creación de estos trabajos y la pila ha golpeado más de 1000 trabajos. Solucioné el problema que causó que muchos trabajos se pusieran en cola y ahora el problema que tengo es que los trabajos creados por el error siguen ahí y, por lo tanto, es difícil probar algo, ya que un trabajo se agrega a una cola con más de 1000 trabajos. Parece que no puedo detener estos trabajos. He intentado eliminar la cola del redis-cli usando el comando flushall pero no funcionó. ¿Me estoy perdiendo de algo? Porque parece que no puedo encontrar una manera de deshacerme de estos trabajos.
Es más seguro y a prueba de balas usar la API de Resque en lugar de eliminar todo en Redis de Resque. Resque hace un poco de limpieza en el interior.
Si desea eliminar todas las colas y los trabajos en cola asociados:
Resque.queues.each {|queue| Resque.remove_queue(queue)}
Las colas se volverán a crear la próxima vez que se encola un trabajo.
Esto es lo que funciona ahora:
Resque.remove_queue("...")
Ingrese la consola redis:
redis-cli
Listar bases de datos:
127.0.0.1:6379> KEYS *
1) "resque:schedules_changed"
2) "resque:workers"
3) "resque:queue:your_overloaded_queue"
"resque:queue:your_overloaded_queue"
- db que necesitas.
Entonces corre:
DEL resque:queue:your_overloaded_queue
O si desea eliminar trabajos especificados en cola, enumere algunos valores de db con el comando LRANGE
:
127.0.0.1:6379> LRANGE resque:queue:your_overloaded_queue 0 2
1) "{/"class/":/"AppClass/",/"args/":[]}"
2) "{/"class/":/"AppClass/",/"args/":[]}"
3) "{/"class/":/"AppClass/",/"args/":[]}"
Luego copie / pegue un valor al comando LREM
:
127.0.0.1:6379> LREM resque:queue:your_overloaded_queue 5 "{/"class/":/"AppClass/",/"args/":[]}"
(integer) 5
Donde 5 - número de elementos para eliminar.
Reproduciendo las respuestas anteriores, si necesita borrar todas sus colas, puede usar lo siguiente:
Resque.queues.each{|q| Resque.redis.del "queue:#{q}" }
Resque ya tiene un método para hacerlo: pruebe Resque.remove_queue(queue_name)
(consulte la documentación here ). Internamente, realiza Resque.redis.del()
, pero también realiza otras Resque.redis.del()
limpieza, y al usar un método api (en lugar de hacer suposiciones sobre cómo funciona resque), estará más preparado para el futuro.
Si abre una consola de rieles, puede ejecutar este código para borrar su (s) cola (s):
queue_name = "my_queue"
Resque.redis.del "queue:#{queue_name}"
Tarea de rake actualizada para borrar (según los últimos cambios de comandos de redis): https://gist.github.com/1228863