2012-08-08 13 views
11

Sto eseguendo un semplice progetto Django su Heroku. Funziona, ma se ricevo un errore del server non mi dà alcun dettaglio nei log. Ciò rende gli errori incredibilmente difficili da gestire.Heroku registra i mancati errori nei progetti Django

Ora ho impostato un server di gestione temporanea e ha lo stesso problema: le pagine non funzionano e non ricevo feedback sul motivo.

tronchi $ Heroku

...

2012-08-08T13:55:58+00:00 app[web.1]: Development server is running at http://0.0.0.0:59048/ 
2012-08-08T13:55:59+00:00 heroku[web.1]: State changed from starting to up 
2012-08-08T13:56:01+00:00 heroku[router]: GET [xxx].herokuapp.com/ dyno=web.1 queue=0 wait=0ms service=22ms status=500 bytes=27 
2012-08-08T13:56:01+00:00 app[web.1]: [08/Aug/2012 14:56:01] "GET/HTTP/1.1" 500 27 
2012-08-08T13:56:02+00:00 heroku[router]: GET [xxx].herokuapp.com/favicon.ico dyno=web.1 queue=0 wait=0ms service=6ms status=500 bytes=27 
2012-08-08T13:56:09+00:00 heroku[router]: GET[xxx].herokuapp.com/admin dyno=web.1 queue=0 wait=0ms service=2ms status=301 bytes=0 
2012-08-08T13:56:09+00:00 app[web.1]: [08/Aug/2012 14:56:09] "GET /admin HTTP/1.1" 301 0 
2012-08-08T13:56:10+00:00 heroku[router]: GET [xxx].herokuapp.com/admin/ dyno=web.1 queue=0 wait=0ms service=224ms status=500 bytes=27 
2012-08-08T13:56:10+00:00 app[web.1]: [08/Aug/2012 14:56:10] "GET /admin/ HTTP/1.1" 500 27 
2012-08-08T13:56:10+00:00 heroku[router]: GET [xxx].herokuapp.com/favicon.ico dyno=web.1 queue=0 wait=0ms service=6ms status=500 bytes=27 

Come si può vedere, le pagine stanno tornando come 500, ma io non ricevo alcuna informazione di stack trace o simile.

Possibili problemi possono essere indicati da: 'Il server di sviluppo è in esecuzione su ...' - cosa significa e sta influenzando la registrazione degli errori?

Inoltre, sto utilizzando un file modello '500.html' per definire una pagina di errore 500 personalizzata. Questo potrebbe nascondere gli errori in qualche modo? Non dovrebbe davvero.

Oppure devo cercare in un altro posto i registri con Django su Heroku?

Grazie!

risposta

9

Sembra che sia stato semplicemente un problema causato dall'aspettativa che Django con Heroku avrebbe funzionato come Rails. Silly me.

Per chiunque altro soffre questo problema quando si spostano da un quadro/lingua all'altra:

  • Quando debug è off, Django utilizza il logger standard di Python per gestire gli errori nel codice.
  • C'è una configurazione predefinita in fondo a settings.py che invia email agli amministratori del sito in caso di errori. Bello. Ha bisogno di una serie di indirizzi e-mail nella variabile ADMINS in settings.py per funzionare.
  • Gli errori vengono inviati, per impostazione predefinita, a STDERR invece di STDOUT, quindi non verranno visualizzati nei registri. Questo può essere cambiato apparentemente. Prova qui se si desidera che questo comportamento:

    http://codeinthehole.com/writing/console-logging-to-stdout-in-django/

+1

I documenti di Heroku indicano che registreranno sia stderr che stdout ... Mi chiedo se questo fosse diverso quando hai risposto a questo e ora è cambiato? https: //devcenter.heroku.com/articles/logging # writing-to-your-log Immagino di poterlo provare. –

+0

Il problema che avevo non era con Heroku, che funzionava come mi aspettavo. Era con Django, che non funzionava come Rails. Forse ovviamente. –

0

Questo comportamento è impostato dal server (ad esempio gunicorn), non da Django o Heroku.

Di solito c'è una riga di comando o una configurazione che modifica il livello di registro predefinito.

+1

Ah, quindi le impostazioni predefinite di Heroku non mostrano le tracce dello stack? Grazie, questo mi dà una direzione da provare. Se fruttuoso, spiegherò la mia soluzione e accetto. –

+1

OK, ho provato a usare gunicorn e impostare il livello di registrazione per il debug. Niente da fare. Aggiornamento della domanda principale. –

+0

Come ho scoperto, il comportamento è impostato da Django utilizzando le impostazioni di registrazione nella parte inferiore di settings.py. All'inizio è un po 'opaco, ma capisco che è un set standard di logger Python quindi ci sarà un sacco di aiuto su internet. –

-3

Questo può essere risolto semplicemente cambiando il tuo DEBUG nel file settings.py. DEBUG = True

Problemi correlati