Есть ли способ добавить обратный вызов для неудачной попытки в Delayed :: Job? - PullRequest
2 голосов
/ 10 февраля 2011

Время от времени задание увеличивает попытку и не выполняет метод regenerate_styles.Я заметил, что, если я передам метод rengerate_styles вручную тому, что не удалось, - 100% времени всегда решает проблему.

Так что, если изображение не обрабатывается, и я передаю:

Photo.find(image).regenerate_styles!

Работает как положено.

Можно ли написать обратный вызов, который обнаружит неудачную попытку и запустит метод?Или есть что-то в этом коде, отличающее то, почему оно не будет обрабатываться некоторое время.

модель

after_save do |image|
  if image.source_changed?
    Delayed::Job.enqueue PhotoJob.new(image.id)
  end
end

def regenerate_styles!
  self.photo.reprocess!
  self.processing = false
  self.save(false)
end

фотодействие

class PhotoJob < Struct.new(:image_id)
  def perform
    Photo.find(self.image_id).regenerate_styles!
  end
end

1 Ответ

4 голосов
/ 10 февраля 2011

Начиная с DelayedJob 2.1, вызывается хук : ошибка . Просто определите метод с именем error в вашем определении работы.

def error(job, error)
  # do whatever you want here
end
...