繁体   English   中英

Delayed_Job - 与ActionMailer 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM