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.
したがって、アクションメーラーメソッド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 を構成するために他に何もしていません。私が間違っているかもしれないことを説明できますか?