2010-06-30 17 views
13

ho originariamente pubblicato una domanda relativa a questo problema su serverfault.com: https://serverfault.com/questions/152587/apache-mod-proxy-to-another-serverproblema strano con Rails app e Mongrel

allora ho capito che questo non è un problema con il mio configurazione del server, ma la mia domanda rotaie. Ho impostato questa applicazione su server esattamente come un'app funzionante su rails che ho in esecuzione sullo stesso server. Quando avvio il server mia mongrel.log assomiglia a questo:

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

Quando carico una pagina, questo si apre nel registro:

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 

io non riesco a capire che cosa è diverso in questa app che potrebbe causare questo problema.

+0

trovato questo vecchio ticket http://dev.rubyonrails.org/ticket/6716 errore simile. Avete delle dichiarazioni di inclusione al di fuori delle vostre classi? Hai anche controllato i nomi delle tue classi, per assicurarti di non applicare inavvertitamente una classe alle scimmie? –

+0

Ho un modello e un controller "Risorse", potrebbe causarlo? Non credo che sto usando alcuna dichiarazione di inclusione. – trobrock

+0

Ho commentato tutti i codici rilevanti per il modello "Resource" e non ha avuto alcun effetto, inoltre non vedo alcun include nel mio codice. – trobrock

risposta

0

Il problema si verifica ancora nelle richieste GET successive? Ho avuto un problema simile a quello in cui la mia app Rails funzionava correttamente con WEBrick ma non con Mongrel ma trovata da qualche parte sugli internet (here's a link che mostra una versione simile del problema) che le versioni precedenti di Mongrel gestiscono male la prima richiesta alla pagina ma gestiscono successivamente richieste ok.

La soluzione alternativa era che ogni volta che avviavamo l'app, avremmo curl eseguire un GET sull'app per "primeggiare" Mongrel.

+0

È su ogni richiesta – trobrock

0

Questo è in genere un errore di lettura di un file yaml per la configurazione. Ha impostato un oggetto config per ottenere valori e la voce nel file yaml per il proprio ambiente non è presente, quindi l'oggetto è nullo.

Stai utilizzando gemme che hanno un file yaml che forse non è impostato per lo sviluppo?

Non so perché tornare alla 2.3.5 sarebbe d'aiuto - potrebbe essere che carica le cose in un ordine diverso e le informazioni di configurazione sono disponibili.

3

Credo che questa sia una strana combinazione di bug in Rack, Mongrel e Rails.

  1. Salva questo codice ruby ​​nella tua app per config/mongrel.rb: http://gist.github.com/471663

  2. Nella tua config/environment.rb, alla fine del file aggiungere: require File.join(File.dirname(File.expand_path(FILE)), 'mongrel')

  3. In questo stesso file aggiungere la riga nel blocco Rails :: initializer.run: config.gem "mongrel"

Longer spiegazione del problema qui: https://rails.lighthouseapp.com/projects/8994/tickets/4690-mongrel-doesnt-work-with-rails-238

Ciò ha sicuramente lavorato per un'applicazione Rails 2.3.8, anche se patchato leggermente diverso da quanto descritto sopra.

+0

Ho riscontrato lo stesso problema in un'app che utilizzava Rails 2.3.11 a partire da giugno 2011 e ho applicato con successo una soluzione alternativa simile. Secondo il mio codice, ho ricevuto la patch da https://gist.github.com/826692. –

+0

@rkb Grazie mille! Abbiamo avuto lo stesso identico problema a giugno 2016 su Rails 2.3.18. Questa soluzione è ancora valida, tranne che dobbiamo cambiare '2.3.8' con' 2.3.18' su 'config/mongrel.rb' e aggiungere' require File.join (File.dirname (File.expand_path (__ FILE__)) , 'mongrel') 'a' config/environment.rb'. Si noti che sono necessari due caratteri di sottolineatura intorno a "FILE". – Tsutomu

Problemi correlati