2012-08-08 9 views
11

Estoy ejecutando un proyecto simple de Django en Heroku. Funciona, pero si recibo un error del servidor no me da ningún detalle en los registros. Esto hace que los errores sean increíblemente difíciles de tratar.Registros de Heroku para proyectos de Django errores faltantes

Ahora he configurado un servidor de almacenamiento intermedio y tiene el mismo problema: las páginas están fallando y no recibo ningún comentario sobre por qué.

registros $ 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 

Como se puede ver, las páginas están regresando como 500, pero ahora no recibo ninguna información de seguimiento de pila o similar.

Los posibles problemas podrían estar indicados por: 'El servidor de desarrollo se está ejecutando en ...' - ¿Qué significa esto y está afectando el registro de errores?

Además, estoy usando un archivo de plantilla '500.html' para definir una página de error 500 personalizada. ¿Podría esto estar ocultando errores de alguna manera? Realmente no debería.

¿O tengo que buscar en otro lugar para los registros con Django en Heroku?

Gracias!

Respuesta

9

Parece que fue simplemente un problema causado por la expectativa de que Django bajo Heroku funcionaría como Rails. Tonto de mí.

Para cualquier otra persona que sufre este problema al pasar de un marco/idioma a otro:

  • Cuando depuración está apagado, Django usa el registrador de Python estándar para controlar los errores en el código.
  • Hay una configuración predeterminada en la parte inferior de settings.py que envía un correo electrónico a los administradores del sitio cuando hay errores. Bonito. Necesita una matriz de direcciones de correo electrónico en la variable ADMINS en settings.py para funcionar.
  • Los errores se envían, de forma predeterminada, a STDERR en lugar de STDOUT, por lo que no se mostrarán en los registros. Esto se puede cambiar aparentemente. Prueba aquí si desea que este comportamiento:

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

+1

Los documentos de Heroku indican que registrarán tanto stderr como stdout ... Me pregunto si esto solía ser diferente cuando respondiste y ahora ha cambiado. https: //devcenter.heroku.com/articles/logging # writing-to-your-log Creo que puedo probarlo. –

+0

El problema que tuve no fue con Heroku, que funcionó como esperaba. Fue con Django, que no funcionó como lo hace Rails. Quizás obviamente. –

0

Este comportamiento lo establece el servidor (por ejemplo, gunicorn), no Django o Heroku.

Generalmente hay una línea de comando o configuración que cambia el nivel de registro predeterminado.

+1

¿Ah, entonces la configuración predeterminada de Heroku no muestra rastros de pila? Gracias, esto me da una dirección para probar. Si fructífero explicaré mi solución y acepto. –

+1

OK, he intentado usar gunicorn y establecer el nivel de registro para depurar. No dados. Actualizando la pregunta principal. –

+0

Como descubrí, el comportamiento lo establece Django usando la configuración de registro en la parte inferior de settings.py. Esto es un poco opaco al principio, pero entiendo que es una configuración estándar de registrador de Python por lo que habrá mucha ayuda en internet. –

-3

Esto se puede resolver con sólo cambiar su depuración en el archivo de settings.py. DEPURACIÓN = Verdadero

Cuestiones relacionadas