2012-03-13 11 views
19

Estoy usando collectiveidea para los raíles 2.3.8. Estoy creando una serie de trabajos demorados para realizar algunas tareas, después de un tiempo quiero destruir todas las tareas demoradas que se están ejecutando. Si alguien conoce la manera de hacerlo, por favor, ayúdeme.Destruyendo todo el trabajo retrasado en los raíles

Respuesta

50

sólo tenía que leer el README para el delayed_job GitHub page de resolver esto:

Puede invocar puestos de trabajo del rastrillo: claros para eliminar todos los trabajos en la cola.

+2

Esto no hace lo que OP pidió. Está intentando matar trabajos que se están ejecutando, no borrar la cola. – volx757

35

Además de la tarea rastrillo, trabajos DelayedJob son sólo un modelo normal de ActiveRecord, por lo que si usted está en el código Ruby que puede hacer lo que quiera con ellos:

Delayed::Job.destroy_all 
Delayed::Job.delete_all 
Delayed::Job.find(4).destroy 
# etc. 
+0

¿Puede por favor elaborar Delayed :: Job.find (4) .destroy – codeit

+1

@clickit destruir el trabajo retrasado que tiene el id 4. – lulalala

+1

¿Hay una diferencia entre 'destroy' y' delete'? –

0

suena como usted' Tengo un proceso principal que quiere esperar el tiempo de espera si su conjunto de trabajos no se completa dentro de un tiempo determinado. En lugar de aferrarse a las referencias a los trabajos, establezca un indicador en un modelo que indique que el proceso se ha desvanecido. Jobs puede verificar esa bandera y cortocircuitar si ya no son necesarios. (Su clase de trabajo también debe envolver el contenido de su método #perform en un tiempo de espera excedido.)

Casi siempre es una mala idea intentar atenerse a las referencias a objetos de DJ como parece sugerir.

Cuestiones relacionadas