77 votes

Manuellement Réessayer d'Emploi dans Delayed_job

Différés::Emploi de l'auto-retry caractéristique est grande, mais il y a un travail que je veux manuellement réessayer maintenant. Est-il une méthode, je peux appeler sur le travail lui-même comme...

Delayed::Job.all[0].perform

ou exécuter, ou de quelque chose. J'ai essayé quelques petites choses, et peigné à la documentation, mais ne pouvait pas comprendre comment exécuter une nouvelle tentative manuelle d'un emploi.

112voto

The Who Points 3724

Manuellement appeler un emploi

Delayed::Job.find(10).invoke_job # 10 is the job.id

Cela ne supprime pas le travail si elle est exécutée avec succès. Vous avez besoin de supprimer manuellement:

Delayed::Job.find(10).destroy

12voto

Joe Martinez Points 616

Vous pouvez le faire exactement de la façon dont vous l'avez dit, par recherche de l'emploi et en cours d'exécution exécuter.

Cependant, ce que je fais généralement est tout simplement définir le run_at arrière afin que le travail du processeur reprend de nouveau.

10voto

Tony Points 6793

J'ai une méthode d'un contrôleur des fins de test qui vient réinitialise tous les retardée emplois lorsque je tape une URL. Pas super élégant, mais fonctionne très bien pour moi:

# For testing purposes
  def reset_all_jobs
    Delayed::Job.all.each do |dj|
      dj.run_at = Time.now - 1.day
      dj.locked_at = nil
      dj.locked_by = nil
      dj.attempts = 0
      dj.last_error = nil
      dj.save
    end
    head :ok
  end

8voto

jpwynn Points 5222

Avant les réponses ci-dessus peuvent être obsolètes. J'ai trouvé que je devais définir failed_at, locked_by, et locked_at à néant:

(pour chaque emploi que vous voulez réessayer):

d.last_error = nil
d.run_at = Time.now
d.failed_at = nil
d.locked_at = nil
d.locked_by = nil
d.attempts = 0
d.save!

4voto

Darmen Points 1136

Dans un environnement de développement, par le biais rails console, à la suite de Joe Martinez suggestion, une bonne façon de réessayer tout retard de vos travaux est de:

Delayed::Job.all.each{|d| d.run_at = Time.now; d.save!}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X