Мое приложение использует Collective Idea fork of Delayed Job для отправки асинхронной электронной почты. Проблема в том, что это отлично работает в среде разработки, но не в производстве. Работы не терпят неудачу (я проверил таблицу 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 '[email protected]'
from '[email protected]'
sent_on sent_at
body :message => message
end
end
Наконец, это соответствующий метод в моем классе Message
:
def send_email
FeedbackMailer.send_later(:deliver_message, self)
end
Я знаю, что код работает правильно ActionMailer в производстве, потому что я испытал его синхронно, прежде чем переключение на Задержанное задание. Как я уже сказал, я также проработал все это путем успешного использования Delayed Job в разработке.
Если я запустил команду top
на сервере, то я вижу, что процесс задержки с задержкой работы оживает каждые пять секунд. Как я могу отладить это?
Запуск отложенной работы с использованием этого: RAILS_ENV = производственный скрипт/delayed_job start – Sooraj