web-dev-qa-db-fra.com

Détruire tous les travaux retardés dans les rails

J'utilise collectiveidea pour Rails 2.3.8. Je crée un ensemble de travaux retardés pour Exécuter certaines tâches. Après un certain temps, je souhaite détruire tous les travaux retardés en cours d'exécution. Si quelqu'un sait comment procéder, aidez-moi.

27
codeit

Il suffisait de lire le README de la page delay_job GitHub pour résoudre ce problème:

Vous pouvez appeler des travaux de rake: effacez pour supprimer tous les travaux de la file d'attente.

55
Lee Jarvis

En plus de la tâche rake, les tâches DelayedJob ne sont qu'un modèle ActiveRecord normal. Ainsi, si vous utilisez du code Ruby, vous pouvez en faire ce que vous voulez:

Delayed::Job.destroy_all
Delayed::Job.delete_all
Delayed::Job.find(4).destroy
# etc.
42
Ryan Brunner

On dirait que vous avez un processus parent qui veut expirer si l'ensemble de ses travaux ne se termine pas dans un certain délai. Au lieu de vous accrocher aux références aux travaux eux-mêmes, définissez un indicateur sur un modèle indiquant que le processus a été abandonné. Les emplois peuvent vérifier si ce drapeau et ce court-circuit sont inutiles. (Votre classe Job doit également envelopper le contenu de sa méthode #perform dans un délai d'attente.)

C'est presque toujours une mauvaise idée d'essayer de conserver des références à des objets DJ, comme vous semblez le suggérer.

0
betamatt