13

この問題に関する質問を最初に serverfault.com に投稿しました: https://serverfault.com/questions/152587/apache-mod-proxy-to-another-server

これはサーバーのセットアップの問題ではなく、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

この問題の原因となるこのアプリの違いがわかりません。

4

3 に答える 3

3

これは、Rack、Mongrel、Rails のバグの奇妙な組み合わせだと思います。

  1. この Ruby コードをアプリに保存してくださいconfig/mongrel.rb: http://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 アプリでは確実に機能しますが、上記とは少し異なる方法でパッチを当てました。

于 2011-12-17T09:09:15.803 に答える
0

これは通常、構成用の yaml ファイルの読み取りに失敗します。値を取得するための構成オブジェクトが設定されており、環境の yaml ファイルのエントリが存在しないため、オブジェクトは nil です。

開発用に設定されていない可能性のある yaml ファイルを含む gem を実行していますか?

なぜ 2.3.5 に戻すことが役立つのかはわかりません。別の順序でロードされ、構成情報が利用可能になる可能性があります。

于 2011-05-25T10:19:46.907 に答える
0

その後の GET 要求でも問題が発生しますか? Rails アプリが WEBrick では正常に動作するが、Mongrel では動作しないという同様の問題がありましたが、インターネット上のどこかで見つかりました (問題の同様のバージョンを示すリンクをここに示します)。Mongrel の古いバージョンはページへの最初の要求を誤って処理しますが、後続のリクエストを正常に処理します。

私たちが取り入れた回避策は、アプリを起動するたびに、アプリでcurlGET を実行して Mongrel を「準備」することでした。

于 2010-06-30T23:45:04.023 に答える