У меня есть следующий код в AnswerObserver < ActiveRecord::Observer
в моем приложении Rails. После того, как будет создан ответ, отправляется электронное письмо пользователям, просматривающим вопрос.Задержка отправки электронной почты
def after_create(answer)
answer.question.watchers.each do |user|
Notifier.answer_updated(answer, user).deliver
end
Notifier наследует от ActionMailer class 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
.
Согласно этому BlogPost 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, как этот
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. Можете ли вы объяснить, что я могу делать неправильно?
или Томоко может ответить так же, действительно глупый вопрос, но мне нужно, чтобы сделать все другие такие как добавление рабочего и т. д., если все, что я хочу сделать, это использовать Sidekiq для электронных писем? Благодарю. – noob