2016-02-09 112 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幫手。在線路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助手(這是一個表單選擇)。

回答

0

原來這個問題與我使用嵌入式ruby和Resque工作有關。我有一個延遲執行工作,它根據ERb模板執行一項工作。爲了能夠訪問一些ERb的輔助方法,我包括下面的代碼:

include ActionView::Helpers 

不幸的是,我把這個在文件的頂部(類似於要求)代替在Generator類中。在類定義中移動語句解決了問題。

這樣看來,客運是包括作業文件(即使它是在一個單獨的應用程序/工作目錄只有真正供Resque),這是嚴重破壞了一些乘客的函數定義。