2010-01-20 18 views
13

Cada vez que me conecto a mi servidor a través de SSH que necesito para escribir la siguiente:¿Por qué necesito el conjunto DJANGO_SETTINGS_MODULE?

export DJANGO_SETTINGS_MODULE=settings 

si no lo hago cualquier uso del módulo manage.py falla

Mi manage.py tiene la siguiente código agregado:

if "notification" in settings.INSTALLED_APPS: 
    from notification import models as notification 

    def create_notice_types(app, created_models, verbosity, **kwargs): 
     notification.create_notice_type("friends_invite", _("Invitation Received"), _("you have received an invitation")) 
     notification.create_notice_type("friends_accept", _("Acceptance Received"), _("an invitation you sent has been accepted")) 

    signals.post_syncdb.connect(create_notice_types, sender=notification) 
else: 
    print "Skipping creation of NoticeTypes as notification app not found" 

¿Alguna idea?

Respuesta

11

Su manage.py hace referencia a una aplicación (notifications). Esto obliga a Django a quejarse de que se haya establecido DJANGO_SETTINGS_MODULE porque aún no se ha configurado el entorno de Django.

Por cierto, puede forzar la configuración del entorno de forma manual, pero, sinceramente, no haría esto en manage.py. Esa no es una buena práctica en mi opinión.

Aquí es cómo se puede configurar manualmente el entorno Django desde cualquier aplicación (o programa para el caso):

# set up the environment using the settings module 
from django.core.management import setup_environ 
from myapp import settings 
setup_environ(settings) 
+0

Gracias por su gran respuesta. ¿Quiere decir que no se recomienda porque reduce la portabilidad? Explique por qué. – RadiantHex

+2

Sí, reduce la portabilidad. Se debe evitar todo lo que acople la herramienta de gestión a una aplicación. Todas las aplicaciones y proyectos deben tener partes móviles independientes. Imagine un futuro en el que necesite mover una aplicación a otro proyecto o eliminar una de un proyecto actual. Es mejor no tenerlos entrelazados y, en su lugar, realizar cualquier tipo de comprobaciones (de forma segura) desde las propias aplicaciones. – jathanism

6

Es necesario establecer la variable de entorno DJANGO_SETTINGS_MODULE porque es como Django sabe cuál es su módulo de preferencias se llama (para que pueda tener diferentes por proyecto o para prueba y desarrollo). Puede configurarlo en los propios guiones antes de importa django (directa o indirectamente) pero eso no servirá de mucho cuando ejecute Django scripts proporcionados.

La solución más fácil es, probablemente, simplemente establecer DJANGO_SETTINGS_MODULE en las secuencias de comandos de inicio de su shell, por lo que ya no tendrá que configurarlo manualmente. Los archivos habituales para agregarlo son .bash_profile y .bashrc (si realmente usa bash)

+0

Gracias Thomas. ¿Puedes señalarme en alguna dirección con respecto a los scripts bash? Estoy ingresando a través de Putty y no tengo ni idea de cuándo entrarán en vigencia las secuencias de comandos. – RadiantHex

+1

Bueno, la documentación para cualquier sistema operativo o distribución que inicie sesión sería un buen comienzo :) Pero una buena apuesta es simplemente agregar la misma línea de exportación como ya estaba usando en su archivo .bash_profile o .bashrc, en algún lugar cerca de otras líneas de exportación similares. Cualquiera de ellos debería ser cargado por cada nuevo caparazón. –

0

De forma predeterminada, manage.py busca un módulo de configuración en el mismo directorio que él. Si no encuentra uno, se dispara con un mensaje para usar django-admin.py en su lugar. En realidad, no configura el entorno hasta que se ejecute execute_manager. Si necesita ejecutar sus anzuelos antes de llamar a sus funciones de administración, la práctica que he sugerido es colocarlos en la aplicación correspondiente models.py.

Cuestiones relacionadas