2011-12-21 77 views
3

注意:使用Rails 3.1和當前delayed_job gem。我有User模型,調用after_create :mail_confirmationDelayed_job不發送Rails 3郵件

mail_confirmation方法如下所示,每delayed_job的說明:

def mail_confirmation 
    UserMailer.delay.registration_confirmation(self) 
end 

UserMailer是:

class UserMailer < ActionMailer::Base 
    default from: "[email protected]" 

    def registration_confirmation(user) 
    @user = user 
    mail(:to => "#{user.full_name} <#{user.email}>", :subject => "Test registration email") 
    end 
end 

作業在排隊,並從rake jobs:work輸出使它看起來好像它成功完成:

[Worker(host:mymac.local pid:73694)] Starting job worker 
[Worker(host:mymac.local pid:73694)] Class#registration_confirmation completed after 1.3659 
[Worker(host:mymac.local pid:73694)] 1 jobs processed at 0.7288 j/s, 0 failed ... 

沒有錯誤,但電子郵件從不發送。

def mail_confirmation 
    UserMailer.registration_confirmation(self).deliver 
end 

我怎樣才能找到被處理作業時發生了什麼:如果我從方法調用中User模型刪除delayed去與標準deliver方法能正常工作?任何想法如何解決它?


更新看來,它與此有關:

NoMethodError with delayed_job (collectiveidea gem)

+0

當你是重新啓動最後一次你的'耙作業:工作任務?每次更改代碼時都需要重新啓動,因此它可能沒有最新的郵件程序代碼。 – iwasrobbed 2011-12-21 21:29:57

+0

我每次更改代碼並重新嘗試時都會重新啓動它。 – Clay 2011-12-21 21:50:48

+0

您的tlsmail gem是否已安裝並配置好? – 2011-12-23 11:49:11

回答

0

我在這裏遇到同樣的問題。我發現由於某種原因,調用郵件程序類的延遲方法正在通過方法Delayed::MessageSending#delay而不是Delayed::DelayMail#delay來處理,它實例化了正確的可執行文件(它是PerformableMailer而不是PerformableMethod)。它不會使作業崩潰,因爲PerformableMethod只是調用沒有交付的方法。

看看:

  • delayted_job/lib中/延遲/ message_sending.rb
  • delayted_job/lib中/延遲/ performable_mailer.rb