2011-01-27 9 views
6

Estoy empezando a desarrollar el código de Django en un servidor, ejecutándome sobre Apache/mod_wsgi.Depuración del código de Django en mod_wsgi (cómo acceder ['wsgi.errors'])

Estoy mirando para entender algunas cosas:

  1. ¿Qué técnicas se utilizan normalmente para depurar aplicaciones que se ejecutan en el servidor ?

  2. Específicamente, estoy tratando de usar la depuración de "impresión" por el momento. Pero I parece que no puede obtener instrucciones de impresión para funcionar. Estoy imprimiendo en stderr, pero No estoy seguro de qué archivo de registro debería ver . De acuerdo con this, debería estar usando environ['wsgi.errors'], pero ¿cómo puedo acceder a desde mi código de Django?

Gracias!

EDIT: Por cierto, la adición de la línea print >> sys.stderr, 'message ...' no parece no sólo para imprimir en cualquier archivo de registro, hace que partes de mi solicitud para no cargar con sencillez.

+2

Descubrí cómo acceder al entorno. Simplemente haz esto: 'request.META ['wsgi.errors']. Write (" ello world ")'. –

+1

Usando 'imprimir' como lo muestra, dirigirse a stderr debería funcionar bien. El archivo de registro de errores Apache al que va depende de si está utilizando el modo incrustado o el modo daemon y si está utilizando la directiva ErrorLog dentro de VirtualHost. Si no está saliendo en el registro, ¿qué violines está haciendo a sys.stdout/sys.stderr en su archivo de script WSGI, si lo hay? –

+2

El uso también puede usar "print >> request.META ['wsgi.errors'], 'hello world'". –

Respuesta

5
  1. Intente utilizar el django debug toolbar. Puede ayudar mucho con la depuración cuando no se puede usar un depurador.

    Realmente, la depuración se debe hacer en su máquina de desarrollo. Todavía tengo que ver un problema de código en producción con django que no estaba ocurriendo en mi caja de desarrollo.

  2. Por lo general, no se puede imprimir en mod_wsgi. Use el módulo logging en su lugar. Eso es realmente lo que quiere, y la barra de herramientas de depuración le mostrará las declaraciones de registro en la página, por lo que ni siquiera tiene que mirar el archivo.

+1

Estoy tratando de usar el módulo de registro. He agregado, en la parte superior de mi views.py, las primeras líneas de "ejemplos simples", pero obtengo un IOError de "permiso denegado" (estoy intentando iniciar sesión en mi directorio personal). ¿Hay algo que deba hacer para otorgar permisos? –

+0

Encontré el problema: el usuario con el que Apache se está ejecutando no es el usuario con el que me conecto, por lo que el directorio personal está fuera de los límites. Le di a todos permisos para el directorio de registro usando 'chmod a + w logs'. ¿Tiene alguna recomendación sobre cómo configurar el problema de registro con Django?Tengo la sensación de que simplemente agregar el código en la parte superior de mi 'view.py' no es una gran idea. –

+1

En cualquier versión de mod_wsgi puede usar "print >> sys.stderr, 'message ...'". Use la última versión de mod_wsgi y puede usar "imprimir" sin dirigirlo a stderr. Fue bloqueado para mod_wsgi <3.0 para animarlo a escribir aplicaciones portátiles WSGI, pero a nadie parece importarle eso. Lea "http://blog.dscpl.com.au/2009/04/wsgi-and-printing-to-standard-output.html" para conocer el historial y los motivos. –

Cuestiones relacionadas