2011-02-10 66 views
1

偶尔会有一项工作会增加尝试,但不会执行方法regenerate_styles。我注意到,如果我手动传递一个方法rengerate_styles到任何失败的工作 - 100%的时间总是解决问题。有没有办法在Delayed :: Job中添加一个回调失败的尝试?

因此,如果图像不处理,我经过:

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 

的photojob

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

回答

4

从DelayedJob 2.1开始有一个hook called :error。 只需在作业定义中定义一个名为error的方法即可。

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

谢谢西蒙娜!这帮了一大堆忙。 – Trip 2011-02-10 14:32:27

相关问题