我正在运行nginx和乘客来托管Rails 3.2.22网站。它直到最近才开始工作,但是最新的部署遇到了某种错误。
由于以下错误,nginx / passenger未能正常启动: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>'
由于我不明白的原因,看起来Passenger正在调用一个action_view帮助器来选择&#39;选择&#39;第156行的action_view帮助器如下所示:
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]
最有可能是完全不同的选择&#39;呼叫。我无法弄清楚为什么乘客正在调用ActionView助手的调用(这是一个表单选择)。
答案 0 :(得分:0)
事实证明这个问题与我使用嵌入式ruby和 Resque 作业有关。我有一个延迟执行作业,它根据ERb模板执行一项工作。为了能够访问某些 ERb 辅助方法,我添加了以下代码:
include ActionView::Helpers
不幸的是,我把它放在文件的顶部(类似于 require ),而不是在Generator类中。在类定义中移动语句解决了这个问题。
似乎 Passenger 包含了作业文件(即使它位于单独的 app / jobs 目录中,并且仅供 Resque <使用/ strong>)这对一些乘客函数定义造成了严重破坏。