2012-04-19 29 views
33

He creado un proyecto simple de django 1.4 y estoy tratando de emitir syncdb para crear el esquema de db (postgres). Estoy recibiendo este error: -"settings.DATABASES está configurado incorrectamente" error al realizar syncdb con django 1.4

Traceback (most recent call last): 
File "manage.py", line 10, in <module> 
execute_from_command_line(sys.argv) 
File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 443, in execute_from_command_line 
utility.execute() 
File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 382, in execute 
self.fetch_command(subcommand).run_from_argv(self.argv) 
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 196, in run_from_argv 
self.execute(*args, **options.__dict__) 
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 232, in execute 
output = self.handle(*args, **options) 
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 371, in handle 
return self.handle_noargs(**options) 
File "/usr/local/lib/python2.6/dist-packages/django/core/management/commands/syncdb.py", line 57, in handle_noargs 
cursor = connection.cursor() 
File "/usr/local/lib/python2.6/dist-packages/django/db/backends/dummy/base.py", line 15, in complain 
raise ImproperlyConfigured("settings.DATABASES is improperly configured. " 
django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured.Please supply the ENGINE value. Check settings documentation for more details. 

Mi archivo settings.py se parece: -

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 
     'NAME': 'test',      # Or path to database file if using sqlite3. 
     'USER': 'test',      # Not used with sqlite3. 
     'PASSWORD': 'test',     # Not used with sqlite3. 
     'HOST': '',      # Set to empty string for localhost. Not used with sqlite3. 
     'PORT': '',      # Set to empty string for default. Not used with sqlite3. 
    } 
} 

que puede conectarse a la base de datos usando psql OK - cualquier idea? Gracias por adelantado !

+4

¿Cómo se ve la línea 'DATABASES' en la salida de' ./manage.py diffsettings'? – okm

+1

DATABASES = {'default': {'ENGINE': 'django.db.backends.', 'NAME': '', 'HOST': '', 'USER': '', 'PASSWORD': '', 'PUERTO': ''}}. Eso parece incorrecto ¿no? - ¿Cómo puede ser arreglado? – bzo

Respuesta

22

Es posible que django no esté accediendo al archivo settings.py que crees que utiliza. Trate explícitamente señalar Django para su archivo de configuración mediante el uso de --settings

./manage.py --settings=nameofproject.settings runserver/syncdb 

Si esto funciona, entonces, tendrá que averiguar por qué Django está importando el archivo de ajustes erróneos.

¿Ha actualizado de 1.3 a 1.4 por accidente?

+2

Gracias, todo arreglado. Este fue un problema de actualización 1.3 -> 1.4. Limpiar y reinstalar django y todo estaba bien. – bzo

+1

Otro consejo es verificar su configuración usando: echo $ DJANGO_SETTINGS_MODULE - si esto se establece en algo inesperado puede causar este error. Si es así, puede probar la configuración solo para este comando utilizando: DJANGO_SETTINGS_MODULE = nameofproject.settings ./manage.py runserver – RichVel

+0

@Jonas Por favor dígame el comando para django 1.7 ya que syncdb no funciona en él –

3

¿Qué archivo de settings.py ha actualizado? También tuve este mismo problema al principio cuando no leí sobre los cambios de Django de 1.3 a 1.4, lo que causa importaciones dobles. Aquí hay un extracto del https://docs.djangoproject.com/en/1.4/releases/1.4/#updated-default-project-layout-and-manage-py. La última versión de Django (actualmente 1.4.2) se envía con un diseño de proyecto predeterminado actualizado y un archivo manage.py para el comando de administración de inicio de proyecto y el diseño del proyecto predeterminado ha cambiado.

Para corregir su error, el archivo settings.py correcto que debe usar NO es el que se encuentra en el directorio principal del proyecto, es el que está dentro del directorio del proyecto (con el mismo nombre).

4

hay dos archivos '' settings.py en su proyecto (si su sistema operativo es similar a UNIX):

  • Uno de ellos es en el primer dir
  • Se encuentra en el directorio/dir

Necesita escribir el MOTOR en el segundo (dir/dir/setting.py).

¡Buena suerte!

0

Reinstalar Django me sirvió (en realidad, eliminar el archivo de huevos), como se sugiere en el siguiente enlace. https://code.djangoproject.com/ticket/18058 Parece que la actualización de 1.3 a 1.4 parece causar muchos de estos problemas.

12

Para mí, he tenido un problema similar con Django 1.6 ahora:

Antecedentes

Django proyecto 1.6 heroku utilizando la base de datos Heroku Postgresql

quería desarrollar directamente en el servidor PostgreSQL (Así que no copie el ".postgresql_psycopg2" poco si usted no está utilizando también PostgreSQL)

  • No hay problema mediante el desarrollo de db psql locales
  • ¿Entendido error cuando sin comentar la línea de utilizar heroku db

    DATABASES['default'] = dj_database_url.config(default=os.getenv('DATABASE_URL')) 
    

El primer intento fue agregar más detalles, como otra línea,

DATABASES['default']['ENGINE'] = 'django.db.backends.postgresql_psycopg2' 

Esto no funcionó, porque el error me pidió NAME, que rechazó.

SOLUCIÓN

Al final, esto lo resolvió:

  1. me encontré con "config heroku" para ver más detalles me presentaron en el formato:

    postgres://user:[email protected]/dbname 
    
  2. Actualicé el archivo settings.py para reflejar esos detalles:

    DATABASES = { 
        'default': { 
         'ENGINE': 'django.db.backends.postgresql_psycopg2', 
         'NAME': 'your_heroku_db_name',      
         'USER': 'your_heroku_db_user_name', 
         'PASSWORD': 'your_heroku_password', 
         'HOST': 'ec2-23-21-133-106.compute-1.amazonaws.com', # Or something like this 
         'PORT': '5432',      
        } 
    } 
    

    que la punta es de https://stackoverflow.com/a/19719966/870121

    Nota: mi próximo plan es abstraer estos de nuevo en .env las variables en vez de dejarlos visibles en settings.py

  3. a continuación os comento la línea más tarde,

    # DATABASES['default'] = dj_database_url.config(default=os.getenv('DATABASE_URL')) 
    

    así BASES dE DATOS solamente se ha especificado una vez en el archivo settings.py

    de esta forma el programa de leer todo lo necesario para conectarse a la heroku PostgreSQL db

    por ejemplo, ahora python manage.py syncdb está trabajando para mí


Si quieres probar el desarrollo de localmente, comente todo lo anterior y en su lugar establecer su servidor local de postgresql va y descomenta el equivalente local de lo anterior:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': 'cool01db', 
     'USER': '', 
     'PASSWORD': '', 
     'HOST': 'localhost', # '127.0.0.1' probably works also 
     'PORT': '5432', 
    } 
} 

Eso es para m https://stackoverflow.com/a/25962586/870121

+0

gracias, fue muy útil para mí! (funcionó bien en heroku, pero no localmente ...) – Hoff

+0

La documentación de heroku es tan extensa que es confusa – 82din

Cuestiones relacionadas