2011-02-10 58 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

相關問題