2010-06-30 35 views
13

奇怪的問題,我最初發布有關這個問題上serverfault.com一個問題:https://serverfault.com/questions/152587/apache-mod-proxy-to-another-server與Rails應用程序和雜種狗

因爲我已經意識到,這是不符合我的服務器設置一個問題,但我的Rails應用程序。我已經將這個應用程序設置爲服務器方式,與我在同一臺服務器上運行的另一個正常運行的rails應用程序完全相同。當我開始了我的服務器mongrel.log看起來是這樣的:

** Daemonized, any open files are closed. Look at /var/www/osuwebdev/tmp/pids/mongrel.pid and log/mongrel.log for info. 
** Starting Mongrel listening at 0.0.0.0:8080 
** Starting Rails with production environment... 
** Rails loaded. 
** Loading any Rails specific GemPlugins 
** Signals ready. TERM => stop. USR2 => restart. INT => stop (no restart). 
** Rails signals registered. HUP => reload (without restart). It might not work well. 
** Mongrel 1.1.5 available at 0.0.0.0:8080 
** Writing PID file to /var/www/osuwebdev/tmp/pids/mongrel.pid 

當我打開一個頁面此日誌中彈出:

Wed Jun 30 19:46:10 +0000 2010: Error calling Dispatcher.dispatch #<NoMethodError: undefined method `[]' for nil:NilClass> 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/cgi.rb:108:in `send_cookies' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/cgi.rb:136:in `out' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/http_response.rb:65:in `start' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/cgi.rb:135:in `out' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/rails.rb:81:in `process' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:159:in `process_client' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:158:in `each' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:158:in `process_client' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:285:in `run' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:285:in `initialize' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:285:in `new' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:285:in `run' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:268:in `initialize' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:268:in `new' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:268:in `run' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:282:in `run' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:281:in `each' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:281:in `run' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:128:in `run' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/command.rb:212:in `run' 
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:281 
/usr/local/bin/mongrel_rails:19:in `load' 
/usr/local/bin/mongrel_rails:19 

我無法弄清楚什麼是這個應用程序不同的是可能會導致此問題。

+0

發現此舊票http://dev.rubyonrails.org/ticket/6716類似的錯誤。你有沒有包括你的課程之外的陳述?你是否也檢查過你的班級名稱,以確保你不是無心地猴子補課? – 2010-06-30 22:13:22

+0

我確實有一個「資源」模型和控制器,可能會導致它?我不相信我在使用任何包含語句。 – trobrock 2010-06-30 23:16:21

+0

我將「Resource」模型的所有相關代碼都註釋掉了,它沒有任何效果,我也沒有看到我的代碼中包含任何代碼。 – trobrock 2010-06-30 23:25:09

回答

0

您是否仍然在隨後的GET請求中看到問題?我有一個類似的問題,我的Rails應用程序在WEBrick下運行良好,但不在Mongrel下運行,但在互聯網上找到某處(here's a link,顯示類似的問題版本),舊版本的Mongrel錯誤地處理了頁面的第一個請求,請求確定。

我們放入的解決方法是,每當我們啓動應用程序時,我們都會在應用程序上執行一次GET以「主要」Mongrel。

+0

它在每個請求上 – trobrock 2010-06-30 23:49:57

0

這是通常無法讀取配置的yaml文件。它已經設置了一個配置對象來獲取來自yaml文件的值,並且你的環境中沒有該對象,因此該對象爲零。

您是否正在運行任何有可能未設置開發的yaml文件的寶石?

我不知道爲什麼回到2.3.5會有幫助 - 它可能是它以不同的順序加載內容並且配置信息可用。

3

我認爲這是Rack,Mongrel和Rails中的一個奇怪的錯誤組合。

  1. 保存此Ruby代碼在你的應用config/mongrel.rbhttp://gist.github.com/471663

  2. 在你config/environment.rb,在文件中添加的盡頭: require File.join(File.dirname(File.expand_path(FILE)), 'mongrel')

  3. 在同一文件中加入這一行在Rails :: initializer.run塊中: config.gem "mongrel"

較長的解釋這裏的問題:https://rails.lighthouseapp.com/projects/8994/tickets/4690-mongrel-doesnt-work-with-rails-238

這無疑工作了一個Rails 2.3.8應用程序,雖然我打補丁它稍微不同於上面描述。

+0

我在2011年6月左右的某個時間在使用Rails 2.3.11的應用程序中遇到了同樣的問題,併成功應用了類似的解決方法。根據我的代碼,我從https://gist.github.com/826692獲得了補丁。 – 2012-08-08 05:01:09

+0

@rkb非常感謝!我們在2016年6月的Rails 2.3.18上遇到了完全相同的問題。這個解決方法仍然有效,除了我們必須在'config/mongrel.rb'上用'2.3.18'修改'2.3.8'並添加'require File.join(File.dirname(File.expand_path(__ FILE__)) ,'mongrel')'到'config/environment.rb'。請注意,'FILE'周圍需要兩個下劃線。 – Tsutomu 2016-06-29 07:07:37