注意:使用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
如何查看处理作业时发生的情况?知道怎么解决吗?
更新它似乎与此相关:
答案 0 :(得分:1)
我通过恢复到之前版本的delayed_job解决了这个问题。
gem 'delayed_job', '2.1.2'
答案 1 :(得分:0)
我在这里遇到同样的问题。我发现由于某种原因,调用Mailer类的延迟方法由方法Delayed::MessageSending#delay
而不是Delayed::DelayMail#delay
处理,它实例化了可执行的权限(PerformableMailer
而不是PerformableMethod
})。它不会导致作业崩溃,因为PerformableMethod
只调用没有传递的方法。
看看: