簡體   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