2009-11-25 6 views
6

Me gustaría ejecutar algunas comprobaciones del entorno cuando se inicia mi proceso django y muere ruidosamente en el caso de un error. Estoy pensando en cosas como que la base de datos tiene una codificación incorrecta o que la máquina tiene una versión de Python que no admitimos.¿Cuál es el lugar correcto para poner un código de arranque extra en django?

Prefiero que nuestro equipo se enfrente a un error fatal que tienen que solucionar, en lugar de poder ignorarlo.

Estoy de acuerdo con la escritura de estos controles, pero tengo curiosidad acerca de dónde es el mejor lugar para ponerlos. ¿Cómo puedo hacer que se ejecuten como parte del proceso de inicio de django? Pensé que podría haber una señal que podría escuchar también, pero no puedo encontrar una relevante en los documentos.

+0

Ver http://stackoverflow.com/questions/2781383/where-to-put-django-startup-code –

Respuesta

3

Los pondría en settings.py. En el pasado, he puesto comprobaciones del sistema como éste:

try: 
    from local_settings import * 
except ImportError: 
    print "Missing %s" % os.path.join(PROJECT_ROOT, "local_settings.py") 

if DEBUG: 
    for p in [PROJECT_ROOT, MEDIA_ROOT, THEME_DIR, ADMIN_MEDIA_ROOT] + list(TEMPLATE_DIRS): 
     p = os.path.normpath(p) 
     if not os.path.exists(p): 
      print "Missing path: %s" % p 
+1

Veo que funcionaría, sin embargo, la combinación de código ejecutable y configuración parece "incorrecta". –

+0

SUre, compraré eso. La sugerencia de PiotrLegnica de \ _ \ _ init \ _ \ _. Py suena bien, aunque dudo que la inicialización se realice en settings.py en el momento en que se carga. – hughdbrown

+0

'settings.py' sería mi elección, también, para este control de seguridad. pensé que había una señal de validación posterior al modelo (el tipo de validación del modelo realizado opcionalmente por un comando de administración), pero no pude encontrar uno en la fuente. – Carson

4

Si no desea utilizar módulo de configuración, a continuación, tratar el proyecto de __init__.py.

4

Si desea comprobar que el sistema está instalado correctamente, creo que debe escribir su own admin command y ejecutarlo como verificación posterior a la instalación.

Creo que no vale la pena comprobar si la versión de python se instala correctamente con demasiada frecuencia, especialmente si está instalando la aplicación django en shared-host. Mi aplicación está alojada en alwaysdata y reinician el proceso FastCgi cada hora. Estas comprobaciones pueden tener un impacto en el tiempo de respuesta de la aplicación.

3

Utilizamos el nivel superior urls.py para esto.

+0

He movido mi pregunta a su respuesta posterior: http://stackoverflow.com/questions/6791911/execute-code-when-django-starts-once-only – Andrei

0

Puede ponerlo en settings.py como lo mencionaron otros, pero tener el código en la configuración no es ideal. También existe la opción de agregar un controlador para django.db.models.signals.class_prepared que realice las comprobaciones de inicio deseadas después de que se prepare una clase de modelo específica.

2

He probado los tres métodos __init__.py Settings.py y urls.py y esto es lo que he encontrado.

Cuando el código se ejecuta desde __init__.py o Settings.py, las funciones de inicio se ejecutan dos veces al iniciarse el servidor web; cuando las funciones de inicio se ejecutan desde urls.py, el código se ejecuta una vez, sin embargo, se ejecuta solo después de la primera solicitud realizada al servidor que lleva a una espera potencialmente larga para que el primer usuario visite su sitio.

Es una práctica estándar llamar a una página de 'calentamiento' cuando vuelvo a poner en línea aplicaciones web grandes, así que no veo que llamar a una función de inicio desde una ubicación CLARAMENTE identificada en urls.py debería ser un problema.

Cuestiones relacionadas