Мое приложение использует Форму коллективной идеи отложенного задания для асинхронной отправки электронной почты. Проблема в том, что это прекрасно работает в среде разработки, но не в производстве. Задания не проваливаются (я проверил таблицу delayed_jobs
), они просто не используются. В журнале производства нет ничего примечательного.
Это содержимое столбца handler
в таблице delayed_jobs
:
--- !ruby/struct:Delayed::PerformableMethod \
object: CLASS:FeedbackMailer\
method: :deliver_message\
args: \
- AR:Message:6\
- Я не вижу там ничего плохого. Это мой FeedbackMailer
класс:
class FeedbackMailer < ActionMailer::Base
def message(message, sent_at = Time.now)
subject = 'New Feedback Message'
subject = "#{subject}: #{message.subject}" if message.subject.present?
subject subject
recipients 'me@example.org'
from 'feedback@example.org'
sent_on sent_at
body :message => message
end
end
Наконец, это соответствующий метод в моем Message
классе:
def send_email
FeedbackMailer.send_later(:deliver_message, self)
end
Я знаю, что код ActionMailer правильно работает в рабочей среде, потому что я тестировал его синхронно перед переключением на отложенное задание. Как я уже сказал, я также прошел через это успешно, используя отложенное задание в разработке.
Если я запускаю команду top
на сервере, то вижу, что процесс Delayed Job Ruby оживает каждые пять секунд. Как я могу отладить это?