[英]delayed_job: 'undefined method' error when using handle_asynchronously
[英]Delayed_Job - handle_asynchronously with ActionMailer?
所以我正在使用延迟工作,而我正试图找出如何让我的所有邮件延迟。 现在,我已经把handle_asynchronously
上放在我的所有动作邮件程序上...但我不认为这会起作用。
def first_notification(time)
@time = time
mail :to => time.person.email,
:from => "email@example.com",
:subject => "#{time.person.name} wants to say hi"
end
handle_asynchronously :advisor_first_notification, :priority => 20
我不认为这会起作用的原因是因为我称之为:
UserMailer.first_notification(@time).deliver
那么它将如何处理这部分的.deliver
部分呢? 现在我得到一个例外。
EXCEPTION: #<ArgumentError: wrong number of arguments (1 for 0)>
这让我觉得在交付方面有些东西搞砸了。
我宁愿每个电子邮件都没有单独的作业文件(因为我有很多这样的电子邮件),那么处理这个问题的正确方法是什么?
我能想到的唯一另一个选择是将调用封装到我的模型中的方法中,让它们具有handle_asynchronously
- 这样他们就可以一次调用整个东西。
邮件程序有点棘手......而不是使用handle_asynchronously
语法:
UserMailer.delay.first_notification(@time)
'技巧'是在邮件程序方法之前有delay()
除了Jesse的回答之外, collectiveidea的delayed_job分支表明你绝对不应该使用Rails 3 Mailer代码的deliver方法:
# without delayed_job
Notifier.signup(@user).deliver
# with delayed_job
Notifier.delay.signup(@user)
我通过以下方式让它工作:
class MyMailer < ActionMailer::Base
def send_my_mail_method(*args)
MyMailer.my_mail_method(*args).deliver
end
handle_asynchronously :send_my_mail_method
def my_mail_method(*args)
# mail call ...
end
end
我喜欢这种方式,因为它允许我测试交付发生交互,而不必像嘲笑delay
调用那样愚蠢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.