2009-11-14 45 views
0

我的應用程序使用Collective Idea fork of Delayed Job異步發送電子郵件。問題是,這在開發環境中可以正常工作,但在生產環境中可以正常工作。工作沒有失敗(我檢查了delayed_jobs表),他們只是沒有被消耗。生產日誌中沒有任何記錄。延遲作業正在開發中,但尚未生產

這是handlerdelayed_jobs表中的內容:

--- !ruby/struct:Delayed::PerformableMethod \ 
object: CLASS:FeedbackMailer\ 
method: :deliver_message\ 
args: \ 
- AR:Message:6\ 

—我看不到什麼不對勁的地方。這是我的FeedbackMailer類:

class FeedbackMailer < ActionMailer::Base 
    def message(message, sent_at = Time.now) 
    subject = 'New Feedback Message' 
    subject = "#{subject}: #{message.subject}" if message.subject.present? 
    subject subject 
    recipients '[email protected]' 
    from  '[email protected]' 
    sent_on sent_at 
    body  :message => message 
    end 
end 

最後,這是我Message類中的相關方法:

def send_email 
    FeedbackMailer.send_later(:deliver_message, self) 
end 

我知道的ActionMailer代碼正常生產,因爲我之前同步測試它切換到延遲作業。正如我所說,我也一直在成功使用Delayed Job進行開發中運行它。

如果我在服務器上運行top命令,那麼我可以看到延遲作業Ruby進程每隔五秒就會啓動一次。我怎樣才能調試呢?

+0

使用以下命令啓動延遲作業:RAILS_ENV =生產腳本/ delayed_job start – Sooraj 2011-09-18 14:06:24

回答

1

約翰,

雖然我也用集體觀念叉,我發現託比的腳本工作過。我只需要一個tmp/pid目錄(你可能擁有這個目錄),你可以獲得日誌文件,並且可以將你的錯誤列在你的Delayed :: Job.first記錄中說明的這個文件交叉引用(或者當然是任何工作) 。 Script for running as a daemon from tobi fork

哦,你確實重新啓動了,如果你改變了嗎?不得不問。

+0

我無法解釋爲什麼,但切換到原來的延遲作業固定它! – 2009-11-15 18:15:13

4

您是否運行了設置爲-e production標誌的./script/delayed_job?

+0

您使用'RAILS_ENV =生產腳本/ delayed_job start'運行叉子 – 2009-11-14 16:04:06

1

log/delayed_job.log?您提到了生產日誌,但延遲作業有自己的日誌。

  • [JOB]上PreviewImageJob
  • 獲取鎖

您可以嘗試製作一個單獨的類,而不是使用_later()方法。

class PreviewImageJob < Struct.new(:item_id) 
    def perform 
    item = Item.find(item_id) 
    item.generate_interior_images! 
    end 
end 
+0

我沒有延遲作業的日誌文件。它是一個配置選項嗎?我嘗試使用單獨的類 - 它在開發中工作,但不在生產中。 – 2009-11-15 10:07:16

+0

生產日誌目錄是否可寫? 'touch log/delayed_job.log'?我剛開始時就出現了,所以我記得。 – wesgarrison 2009-11-16 03:29:08