Delayed_Job NoMethodError при использовании Nginx

У меня возникли проблемы с реализацией драгоценного камня Delayed_Job_Active_Record в моей производственной среде с Nginx. Пользователь отправляет форму «Свяжитесь с нами», соответствующее действие контроллера вызывается Nginx, и следующая строка кода завершается ошибкой:

@contact.delay.send_contact_form

Где соответствующий метод:

def send_contact_form
   ContactMailer.contact_us(self).deliver
end  


Среда разработки: ОК

  • На моем локальном компьютере у меня есть страницы, обслуживаемые Webrick. Все работает нормально, отложенные задания проходят через таблицу Delayed_Jobs и отправляются электронные письма.


Production Env – консоль Rails: ОК

  • На сервере, если я создаю @contact и вызываю @contact.delay.send_contact_form вручную, отложенное задание проходит через таблицу отложенных заданий и отправляется электронная почта.


Производственная среда — Webrick: ОК

  • На сервере, если я запускаю сервер Rails Webrick, я ввожу данные для @contact через веб-интерфейс, а затем отправляю задание, которое проходит через таблицу отложенных заданий, и отправляется электронное письмо.


Производственная среда — Nginx: ОШИБКА

  • В настоящее время приложение обслуживается Nginx.
  • Если я захожу в интерфейс через Nginx и ввожу данные для @contact и отправляю, страница зависает.
  • The Production Log gives the following error on the controller action, (referencing the line above):

    NoMethodError (неопределенный метод `delay' для #‹ Contact:0x000000052962b0>)


Я также подтвердил, что версии Rails, Ruby и гемов Delayed_Job_Active_Record и Daemons одинаковы в обеих средах. .

Любая помощь будет принята с благодарностью, так как я застрял на этом некоторое время. Я хочу найти решение, которое работает с Nginx и дает мне ту же функциональность, что и «Отложенная работа».

Спасибо.


person mobydick    schedule 11.04.2013    source источник


Ответы (1)


Оказывается, проблема заключалась в том, что Unicorn/Nginx не перезапускался после развертывания обновлений кода, оставляя их с неправильными конфигурациями. Проблема также возникла при добавлении Devise и других драгоценных камней в приложение.

Первоначально решение заключалось в том, чтобы войти в оболочку VPS после развертывания (через Capistrano) и выполнить следующее:

Перезапустите Unicorn:

/etc/init.d/unicorn_esg stop
/etc/init.d/unicorn_esg start

Где *unicorn_esg* — ссылка Unicorn на приложение, используемое в моей конфигурации deploy.rb.

Перезапустите Nginx:

sudo service nginx restart

Следующим шагом будет включение этого в конец сценария deploy.rb, чтобы он автоматически запускался в конце каждого развертывания.

person mobydick    schedule 11.05.2013