2009-11-14 4 views
0

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

+0

Запуск отложенной работы с использованием этого: RAILS_ENV = производственный скрипт/delayed_job start – Sooraj

ответ

1

Джон,

Хотя я тоже использовал коллективную Idea вилку, я обнаружил, что сценарий Tobi работает тоже. Мне просто нужен каталог tmp/pid (который у вас есть), и вы получите файл журнала и можете перекрестно ссылаться на этот файл с тем, что говорит ваш столбец ошибок в записи Delayed :: Job.first (или независимо от того, что это за работа) , Script for running as a daemon from tobi fork

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

+0

Я не могу объяснить, почему, но переключение на исходный Задержанное задание исправило это! –

4

Вы бежите ./script/delayed_job с флагом -e production?

+0

Вы запускаете fork, который я использую с помощью RAILS_ENV = производственный скрипт/delayed_job start' –

1

Что-нибудь появляется в 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 
+0

У меня нет файла журнала для Delayed Job. Это вариант конфигурации? Я пытался использовать отдельный класс - он работал в разработке, но не в производстве. –

+0

Каталог журнала производства доступен для записи? 'touch log/delayed_job.log'? Моя только что появилась, когда я начал, поэтому я помню. – wesgarrison

Смежные вопросы