2010-06-30 6 views
13

Ich stellte ursprünglich eine Frage zu diesem Problem auf serverfault.com Bezug: https://serverfault.com/questions/152587/apache-mod-proxy-to-another-serversonderbares Problem mit Rails-Anwendung und Mischlings

ich da erkannt habe, dass das mit meinem Server-Setup ist nicht ein Problem, aber meine Rails-Anwendung. Ich habe diese Anwendung server-weise genau wie eine andere funktionierende Rails-App eingestellt, die ich auf demselben Server ausgeführt habe. Wenn ich den Server mein mongrel.log starten sieht wie folgt aus:

** 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 

Wenn ich eine Seite geladen werden diese im Protokoll erscheint:

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 

ich nicht herausfinden können, was über diese App unterscheidet, kann dieses Problem verursachen.

+0

fand dieses alte Ticket http://dev.rubyonrails.org/ticket/6716 ähnlicher Fehler. Hast du irgendwelche Include-Anweisungen außerhalb deines Unterrichts? Hast du auch deine Klassennamen überprüft, um sicher zu gehen, dass du nicht versehentlich eine Klasse affektiert hast? –

+0

Ich habe eine "Ressourcen" -Modell und Controller, könnte das verursacht werden? Ich glaube nicht, dass ich irgendwelche Include-Anweisungen verwende. – trobrock

+0

Ich habe den gesamten relevanten Code für das "Resource" -Modell auskommentiert und es hatte keinen Effekt, ich sehe auch keine Includes in meinem Code. – trobrock

Antwort

0

Wird das Problem weiterhin bei nachfolgenden GET-Anfragen angezeigt? Ich hatte ein ähnliches Problem, wo meine Rails App unter WEBrick gut laufen würde, aber nicht unter Mongrel, sondern irgendwo im Internet (here's a link, das eine ähnliche Version des Problems zeigt), dass ältere Versionen von Mongrel die erste Anfrage auf die Seite falsch behandeln, aber später behandeln Anfragen ok.

Die Problemumgehung, die wir eingingen, war, dass, wann immer wir die App starteten, wir curl ein GET auf der App durchführen würden, um Mongrel zu 'prime'.

+0

Es ist auf jede Anfrage – trobrock

0

Dies ist in der Regel ein Fehler beim Lesen einer YAML-Datei für die Konfig. Es hat ein config-Objekt eingerichtet, von dem Werte abgerufen werden, und der Eintrag in der yaml-Datei für Ihre Umgebung ist nicht vorhanden, daher ist das Objekt null.

Laufen Sie irgendwelche Edelsteine, die eine Yaml-Datei haben, die vielleicht nicht für die Entwicklung eingerichtet ist?

Ich weiß nicht, warum die Rückkehr zu 2.3.5 helfen würde - es könnte sein, dass es Dinge in einer anderen Reihenfolge lädt und die Konfigurationsinformationen verfügbar sind.

3

Ich glaube, das ist eine seltsame Kombination von Fehlern in Rack, Mongrel und Rails.

  1. speichern Ruby-Code Ihrer App config/mongrel.rb: http://gist.github.com/471663

  2. In Ihrem config/environment.rb, ganz am Ende der Datei hinzu: require File.join(File.dirname(File.expand_path(FILE)), 'mongrel')

  3. In derselben Datei diese Zeile hinzufügen im Rails :: initializer.run Block: config.gem "mongrel"

Längere Erklärung des Problems hier: https://rails.lighthouseapp.com/projects/8994/tickets/4690-mongrel-doesnt-work-with-rails-238

Dies hat definitiv für eine Rails 2.3.8 App funktioniert, obwohl ich es etwas anders als oben beschrieben gepatcht.

+0

Ich habe das gleiche Problem in einer App mit Rails 2.3.11 irgendwann im Juni 2011 erlebt und erfolgreich eine ähnliche Problemumgehung angewendet. Laut meinem Code habe ich den Patch von https://gist.github.com/826692 bekommen. –

+0

@rkb Vielen Dank! Das gleiche Problem haben wir im Juni 2016 auf Rails 2.3.18 erlebt. Diese Problemumgehung ist immer noch gültig, außer dass wir '2.3.8' mit' 2.3.18' in 'config/mongrel.rb' ändern und' require File.join (File.dirname (File.expand_path (__ FILE__)) hinzufügen müssen , 'mongrel') 'zur' config/environment.rb'. Beachten Sie, dass zwei Unterstriche um "FILE" erforderlich sind. – Tsutomu