2016-02-09 2 views
0

Я запускаю nginx и пассажира для размещения сайта Rails 3.2.22. Он работал очень хорошо до недавнего времени, но последнее развертывание наткнулось на какую-то ошибку.Проблема с пассажиром, nginx и Rails3

Nginx/пассажир не запускается должным образом из-за следующей ошибки:

App 1542 stderr: /var/lib/gems/1.9.1/gems/actionpack-3.2.22/lib/action_view/helpers/form_options_helper.rb:156:in `select' 
App 1542 stderr: : 
App 1542 stderr: wrong number of arguments (1 for 3) 
App 1542 stderr: (
App 1542 stderr: ArgumentError 
App 1542 stderr:) 
App 1542 stderr:  from /var/lib/gems/1.9.1/gems/passenger-5.0.23/src/ruby_supportlib/phusion_passenger/request_handler.rb:483:in `wait_until_termination_requested' 
App 1542 stderr:  from /var/lib/gems/1.9.1/gems/passenger-5.0.23/src/ruby_supportlib/phusion_passenger/request_handler.rb:202:in `main_loop' 
App 1542 stderr:  from /var/lib/gems/1.9.1/gems/passenger-5.0.23/src/helper-scripts/rack-preloader.rb:159:in `<module:App>' 
App 1542 stderr:  from /var/lib/gems/1.9.1/gems/passenger-5.0.23/src/helper-scripts/rack-preloader.rb:30:in `<module:PhusionPassenger>' 
App 1542 stderr:  from /var/lib/gems/1.9.1/gems/passenger-5.0.23/src/helper-scripts/rack-preloader.rb:29:in `<main>' 

Похоже, пассажир вызове помощника ACTION_VIEW для «выбора», по причинам, я не понимаю. Помощник ACTION_VIEW в строке 156 выглядит следующим образом:

def select(object, method, choices, options = {}, html_options = {}) 
    InstanceTag.new(object, method, self, options.delete(:object)).to_select_tag(choices, options, html_options) 
end 

Вызывающий в пассажирском (request_helper линия 483) выглядит следующим образом:

ios = select([@owner_pipe, @graceful_termination_pipe[0]])[0] 

который, скорее всего совершенно другой «выберите» вызов. Я не могу понять, почему пассажир вызывает вызов для помощника ActionView (который является выбором формы).

ответ

0

Оказалось, что проблема была связана с моим использованием встроенного рубина и Resque вакансий. У меня есть работа с задержкой выполнения, которая выполняет часть работы на основе шаблона ERb. Для того, чтобы иметь возможность получить доступ к некоторым из ERb вспомогательных методов, я включил следующий код:

include ActionView::Helpers 

К сожалению, я бы поставить это в верхней части файла (аналогично требуется) вместо внутри класса генератора. Перемещение оператора внутри определения класса разрешило проблему.

Казалось бы, что Пассажир был в том числе файл задания (даже если он был в отдельном приложение/заданий каталогов и только действительно для использования Resque) и это играет хаос с некоторыми Пассажира определения функций.

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