2012-03-09 12 views
9

Ho scritto una demo app HelloWorld Rails e l'ho testata con WEBrick (non usa nemmeno un DB, è solo un controller che stampa "ciao mondo"). Quindi ho provato a distribuirlo ad un Apache locale alimentato con Passenger. In realtà questo test serve solo a far funzionare Passenger (è la mia prima implementazione su Apache). Ora non sono nemmeno sicuro che il Passeggero funzioni, ma non ho alcun errore sul lato Apache.Nessun messaggio di registro in production.log

Quando faccio scattare http://rails.test/ il browser mostra la pagina di errore di Rails 500 - quindi presumo che il Passeggero funzioni. Voglio indagare sui log, ma succede che production.log è vuoto! Non penso che sia un problema di autorizzazione, perché se cancello il file, viene ricreato quando ricarico la pagina. Ho provato a cambiare il livello di log in conf/environments/production.rb, cercato di scrivere manualmente per file di log con Rails produzione di console e

Rails.logger.error('asdf') 

restituisce true ma nulla viene scritto production.log. Il percorso (ottenuto per Rails.logger.inspect) è corretto e osservo che il file viene ricreato se lo rimuovo manualmente. Come posso sapere cosa sta succedendo?

(ho già controllato i log di Apache, più ho impostato il più alto livello di debug per passeggeri, ma sembra un problema Rails, quindi non è registrato dal server)

+0

Sto ancora avendo questo problema, anche se sono nei binari 4 .... cosa hai fatto? – Braden

+0

Rails appena aggiornati. Potrebbe essere una regressione – Raffaele

risposta

13

Supponendo che si sta eseguendo Rails 3.2. 1, questo è un bug. Era patched in 3.2.2.

Se non è possibile effettuare l'aggiornamento a 3.2.2 per qualsiasi motivo, this comment on GitHub has a workaround:

# config/initializers/patch_rails_production_logging.rb 
Rails.logger.instance_variable_get(:@logger).instance_variable_get(:@log_dest).sync = true if Rails.logger 
+0

La cosa strana è che ho giocato con 'Logger.flush' nella console di Rails, ma non ha avuto alcun effetto. Aggiornamento risolto il mio problema – Raffaele

+0

Felice che ha aiutato. Ho aggiornato la risposta con una soluzione alternativa per chiunque non possa eseguire l'aggiornamento. – Brandan

+0

'metodo undefined 'sync =' per nil: NilClass (NoMethodError)' con binari 4.1.2 – RAJ

3

L'impostazione di questa funziona sulle rotaie 3.2.11:

Rails.logger = ActiveSupport :: BufferedLogger.new (Rails.root.join ("log", "production.log"))

+2

ciao - dove aggiungo questa linea? – undefined

+0

Inserisco questo in un inizializzatore sotto configurazione. per esempio, in 'config/initializers/logger.rb':' if! Rails.env.development? Rails.logger = ActiveSupport :: BufferedLogger.new (Rails.root.join ("log", "# {Rails.env} .log")) fine' Seriamente, come faccio a ottenere una nuova riga senza incollare in una nuova riga? Se premo il tasto invio, salva la mia modifica. –

Problemi correlati