2012-03-07 59 views
3

我遇到了很大的問題,試圖讓delayed_job與Amazon S3和Paperclip一起工作。有關於如何做到這一點的幾篇文章,但無論出於何種原因,它根本不適合我。我已經刪除了一些其他人正在做的事情 - 最初我在regenerate_styles中保存了一個(validations => false),但這似乎導致了無限循環(由於after save catch),並且沒有似乎是必要的(因爲網址已經保存,只是圖片沒有上傳)。下面是我的模型文件中的相關代碼,submission.rbdelayed_job和回形針 - 圖像沒有處理,但沒有錯誤?

class Submission < ActiveRecord::Base 
    has_attached_file :photo ... 

    ... 

    before_photo_post_process do |submission| 
    if photo_changed? 
     false 
    end 
    end 

    after_save do |submission| 
    if submission.photo_changed? 
     Delayed::Job.enqueue ImageJob.new(submission.id) 
    end 
    end 

    def regenerate_styles! 
    puts "Processing photo" 
    self.photo.reprocess! 
    end 

    def photo_changed? 
    self.photo_file_size_changed? || 
    self.photo_file_name_changed? || 
    self.photo_content_type_changed? || 
    self.photo_updated_at_changed? 
    end 
end 

和我的小ImageJob類在submission.rb文件的底部網站:

class ImageJob < Struct.new(:submission_id) 
    def perform 
    Submission.find(self.submission_id).regenerate_styles! 
    end 
end 

至於我可以說,作業本身是正確創建的(因爲我可以通過查詢將其從數據庫中拉出)。

問題出現時:

$ rake jobs:work 
WARNING: Nokogiri was built against LibXML version 2.7.8, but has dynamically loaded 2.7.3 
[Worker(host:Jarrod-Robins-MacBook.local pid:21738)] New Relic Ruby Agent Monitoring DJ worker host:MacBook.local pid:21738 
[Worker(host:MacBook.local pid:21738)] Starting job worker 
Processing photo 
[Worker(host:MacBook.local pid:21738)] ImageJob completed after 9.5223 
[Worker(host:MacBook.local pid:21738)] 1 jobs processed at 0.1045 j/s, 0 failed ... 

rake任務,然後卡住,永不退出,並已重新處理自己不會出現圖像。

任何想法?

編輯:只是另一個點;同樣的事情發生在heroku上,不只是在本地。

回答

0

延遲作業捕獲所有失敗作業的堆棧跟蹤。它保存在delayed_jobs表的last_error列中。使用數據庫GUI也看看發生了什麼。

如果您應該使用Collective Ideas fork with ActiveRecord as backend,您可以照常查詢模型。爲了獲取例如所有堆棧跟蹤的陣列做

Delayed::Job.where('failed_at IS NOT NULL').map(&:last_error) 

默認情況下,失敗的作業都將被刪除後,25失敗的嘗試。可能是沒有工作了。通過在config/initializers/delayed_job_config.rb

設置

Delayed::Worker.destroy_failed_jobs = false 

防止用於調試目的刪除