![](/img/trans.png)
[英]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.