Delayed_job没有发送Rails 3电子邮件

时间:2011-12-21 21:25:15

标签: ruby-on-rails ruby-on-rails-3 actionmailer delayed-job

注意:使用Rails 3.1和当前delayed_job gem。

我有User模型,可以调用after_create :mail_confirmation

根据delayed_job说明,mail_confirmation方法如下所示:

def mail_confirmation
    UserMailer.delay.registration_confirmation(self)
end

UserMailer是:

class UserMailer < ActionMailer::Base
  default from: "test@mysite.com"

  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 ...

没有错误,但电子邮件永远不会发送。如果我从delayed模型中的方法调用中删除User并使用标准的deliver方法,那么它可以正常工作:

def mail_confirmation
    UserMailer.registration_confirmation(self).deliver
end

如何查看处理作业时发生的情况?知道怎么解决吗?


更新它似乎与此相关:

NoMethodError with delayed_job (collectiveidea gem)

2 个答案:

答案 0 :(得分:1)

是的,我有同样的问题。 @Clay是正确的,目前存在问题:https://github.com/collectiveidea/delayed_job/issues/323

我通过恢复到之前版本的delayed_job解决了这个问题。

gem 'delayed_job', '2.1.2'

答案 1 :(得分:0)

我在这里遇到同样的问题。我发现由于某种原因,调用Mailer类的延迟方法由方法Delayed::MessageSending#delay而不是Delayed::DelayMail#delay处理,它实例化了可执行的权限(PerformableMailer而不是PerformableMethod })。它不会导致作业崩溃,因为PerformableMethod只调用没有传递的方法。

看看:

  • delayted_job / LIB /延迟/ message_sending.rb
  • delayted_job / LIB /延迟/ performable_mailer.rb