Pregunta

Estoy usando Resque en un proyecto Rails-3 para manejar trabajos que están programados para funcionar cada 5 minutos. Hace poco hice algo que se redujo la creación de estos trabajos y la pila ha alcanzado más de 1000 empleos. Se 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 todavía están allí y, por lo tanto, se hace difícil probar algo, ya que se agrega un trabajo a una cola con más de 1000 trabajos. Parece que no puedo detener estos trabajos. Intenté eliminar la cola del Redis-Cli usando el comando FLISHALL pero no funcionó. ¿Me estoy perdiendo de algo? Porque parece que no puedo encontrar una manera de deshacerme de estos trabajos.

¿Fue útil?

Solución

Si abre una consola Rails, puede ejecutar este código para borrar su (s) cola (s):

queue_name = "my_queue"
Resque.redis.del "queue:#{queue_name}"

Otros consejos

Jugando en las respuestas anteriores, si necesita borrar todas sus colas, puede usar lo siguiente:

Resque.queues.each{|q| Resque.redis.del "queue:#{q}" }

El resque ya tiene un método para hacer esto: intente Resque.remove_queue(queue_name) (Ver la documentación aquí). Internamente se desempeña Resque.redis.del(), pero también hace otra limpieza, y al usar un método API (en lugar de hacer suposiciones sobre cómo funciona el resque) será más a prueba de futuro.

Tarea de rastrillo actualizada para la limpieza (según los últimos cambios de comandos de redis): https://gist.github.com/1228863

Esto es lo que funciona ahora:

Resque.remove_queue("...")

Ingrese la consola Redis:

redis-cli

Bases de datos de la lista:

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 los trabajos especificados en la cola, enumere algunos valores de DB con LRANGE dominio:

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 para LREM dominio:

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.

Es más seguro y a prueba de balas para usar la API de resque en lugar de eliminar todo en el Redis del Resque. Resque hace un poco de limpieza en el interior.

Si quieres eliminar todos colas y trabajos asociados:

Resque.queues.each {|queue| Resque.remove_queue(queue)}

Las colas se recreará la próxima vez que se enoje un trabajo.

Documentación

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top