2011-03-29 10 views
9

Quiero utilizar un archivo de configuración diferente en Django - settings_prod específicamente - sin embargo, cada vez que trato de hacer un syncdb con --settings=settings_prod, se queja:El uso de un archivo de configuración que no sea settings.py en Django

python2.6 manage.py syncdb --settings=settings_prod 
Error: Can't find the file 'settings.py' in the directory containing 'manage.py'. It appears you've customized things. 
You'll have to run django-admin.py, passing it your settings module. 
(If the file settings.py does indeed exist, it's causing an ImportError somehow.) 

También intenté configurar la variable de entorno DJANGO_SETTINGS_MODULE=settings_prod sin fin.

Editar: También he establecido la variable de entorno en mi archivo wsgi, también que no tiene fin:

import os 
import sys 

from django.core.handlers.wsgi import WSGIHandler 

os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings_prod' 
application = WSGIHandler() 

Sugerencias?

+1

Y con el WSGI que está funcionando correctamente? Tuve este problema antes, pero solo con 'manage.py' – pajton

+0

Creo que sí, porque al menos muestra una URL que establecí. Simplemente no puedo hacer que sincronice. –

+0

Ok, alguien acaba de responder lo que tenía en mente :). 'import settings' está codificado en' manage.py', por lo que no tiene suerte con este sencillo enfoque. – pajton

Respuesta

9

Yo sé que no importa lo que haces con manage.py, vas a conseguir ese error porque manage.py hace una importación relativa de settings:

try: 
    import settings # Assumed to be in the same directory. 

http://docs.djangoproject.com/en/dev/ref/django-admin/#django-admin-option---settings

Note that this option is unnecessary in manage.py, because it uses settings.py from the current project by default.

Usted debe intente django-admin.py syncdb --settings=mysettings en su lugar

+1

Lo he intentado, pero obtengo: 'ImportError: no se pudo importar la configuración 'settings_prod' (¿Está en sys.path?): Ningún módulo llamado settings_prod' - pero debería ser, según mi archivo WSGI –

+0

Bueno, en realidad acabo de modificar el archivo WSGI para incluir esto: 'sys.path.append ("/home/username/webapps/django/project ")', pero aún no es bueno. –

+0

intente pasar el argumento --pythonpath a django-admin.py para asegurarse de que su ruta esté configurada correctamente. – Wogan

10

Intente crear un mod settings Ule.

  1. Haga una carpeta settings en el mismo directorio que manage.py.
  2. Coloque los archivos de configuración diferentes en esa carpeta (por ejemplo, base.py y prod.py).
  3. Realice __init__.py e importe la configuración que desee como predeterminada. Por ejemplo, el archivo de __init__.py podría tener este aspecto:

    from base import * 
    
  4. ejecutar el proyecto y redefinir la configuración:

    $ python2.6 manage.py syncdb --settings=settings.prod 
    
0

esto le ayudará a:

  • crear otro archivo "setting_prod.py" con su archivo settings.py original.

  • escribe la configuración que necesitas ejecutar, en el archivo setting_prod.py.

  • Luego importe el archivo setting_prod.py en su archivo settings.py.

por ej. settings.py:

VARIABLE = 1 

import setting_prod 

setting_prod.py

VARIABLE = 2 

Después de importar el archivo en el archivo setting_prod.py settings.py, variable se establece en un nuevo valor a "2" de "1".

+0

¿Por qué tienes .py al final? Tengo el error 'ImportError: ningún módulo llamado py' y la cadena VARIABLE no se reemplazará como desee. Si tiene 'import setting_prod', será como setting_prod.VARIABLE – holms

+0

Si configura ' from setting_prod import * ' Obtendrá el comportamiento que está buscando, pero es menos pitónico. – IamnotBatman

0

Podemos utilizar este método para establecer diferentes archivos de configuración, por ejemplo, utilizo un archivo de configuración diferente para mi prueba de unidad (settings_unit_test.py). También tengo otro archivo de configuración para el entorno de infraestructura diferente settings_dev.py, settings_test.py y settings_prod.py.

En el entorno de ventanas (mismo puede hacerse en Linux así)

set DJANGO_SETTINGS_MODULE=settings_unit_test 
set PYTHONPATH=<path_of_your_directory_where_this_file_'settings_unit_test.py'_is_kept> 
Cuestiones relacionadas