[英]Issue with Passenger, nginx and Rails3
我正在运行nginx和passenger来托管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>'
出于我无法理解的原因,乘客似乎在调用action_view助手以进行“选择”。 第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]
这很可能是完全不同的“选择”调用。 我不知道为什么乘客调用了ActionView帮助器的调用(这是一个表单选择)。
事实证明,问题与我对嵌入式红宝石和Resque作业的使用有关。 我有一个延迟执行工作,该工作基于ERb模板执行了一项工作。 为了能够访问某些ERb帮助器方法,我包括以下代码:
include ActionView::Helpers
不幸的是,我将其放在文件的顶部(类似于require )而不是Generator类中。 将语句移到类定义中可以解决此问题。
看来, Passenger包含了作业文件(即使它位于单独的app / jobs目录中,并且仅供Resque使用),这对某些Passenger函数的定义造成了严重破坏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.