AnswerObserver < ActiveRecord::Observer
我的Rails 应用程序中有以下代码。创建答案后,会向查看问题的用户发送一封电子邮件。
def after_create(answer)
answer.question.watchers.each do |user|
Notifier.answer_updated(answer, user).deliver
end
Notifier 继承自 ActionMailerclass Notifier < ActionMailer::Base
并具有方法
def answer_updated(answer, user)
@answer = answer
@user = user
mail(:to => user.email,
:subject => "Your question has been answered")
end
我现在正在尝试使用 SideKiq 将其移至后台进程。我已经安装并运行了 redis,并且我成功地启动了 sidekiq bundle exec sidekiq
。
根据这篇博文http://blog.remarkablelabs.com/2013/01/using-sidekiq-to-send-emails-asynchronously,SideKiq 内置了对 ActionMailer 的支持
The method that you will likely use the most is .delay. Calling .delay from an Action Mailer will result in the email being added to the DelayedMailer queue for processing.
因此,我在调用 action mailer 方法 answer_updated 的观察者中将“deliver”方法替换为“delay”,如下所示
def after_create(answer)
answer.question.watchers.each do |user|
Notifier.answer_updated(answer, user).delay
end
但现在我收到了这个错误
undefined method `delay' for #<Mail::Message:0x007fee0c9af1d0>
我没有做任何其他事情来配置 SideKiq。你能解释一下我可能做错了什么吗?