2011-12-21 76 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