Задержка работы работает в разработке, но не в производстве - PullRequest
0 голосов
/ 14 ноября 2009

Мое приложение использует Форму коллективной идеи отложенного задания для асинхронной отправки электронной почты. Проблема в том, что это прекрасно работает в среде разработки, но не в производстве. Задания не проваливаются (я проверил таблицу 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 оживает каждые пять секунд. Как я могу отладить это?

Ответы [ 3 ]

4 голосов
/ 14 ноября 2009

Запускаете ли вы ./script/delayed_job с установленным флагом -e production?

1 голос
/ 15 ноября 2009

Джон,

Хотя я тоже использовал коллективный форк Idea, я обнаружил, что скрипт Тоби тоже работает. Мне просто нужен каталог tmp / pid (который у вас может быть), и вы получаете файл журнала и можете сопоставить этот файл с тем, что указано в вашем столбце ошибок в вашей записи Delayed :: Job.first (или какой бы то ни было работой, конечно) . Скрипт для запуска в качестве демона из tobi fork

О, а вы сделали перезапуск, если вы внесли изменения правильно? Пришлось спросить.

1 голос
/ 15 ноября 2009

Что-нибудь появляется в log / delayed_job.log ? Вы упомянули рабочий журнал, но у отложенного задания есть собственный журнал.

  • [JOB] получение блокировки на PreviewImageJob

Вы можете попробовать создать отдельный класс вместо использования метода _later ().

class PreviewImageJob < Struct.new(:item_id)
  def perform
    item = Item.find(item_id)
    item.generate_interior_images!
  end
end
...