2012-04-19 9 views
33

Ho creato un semplice progetto django 1.4 e sto provando a emettere syncdb per creare lo schema db (postgres). Sto ottenendo questo errore: -"settings.DATABASES è configurato in modo errato" errore durante l'esecuzione di 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. 

Il mio file settings.py assomiglia: -

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. 
    } 
} 

posso connettersi al database utilizzando psql OK - tutte le idee? Grazie in anticipo !

+4

Che aspetto ha la riga 'DATABASES' nell'output di' ./manage.py diffsettings'? – okm

+1

DATABASE = {'default': {'ENGINE': 'django.db.backends.', 'NOME': '', 'HOST': '' ',' USER ':' ',' PASSWORD ':' ', 'PORT': ''}}. Sembra sbagliato, vero? - come può essere risolto? – bzo

risposta

22

Potrebbe darsi che django non stia accedendo al file settings.py che si ritiene utilizzi. Prova espressamente sottolineare Django al file impostazioni utilizzando --settings

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

Se funziona, allora, si dovrà capire perché Django sta importando il file di impostazioni errate.

Sei passato da 1,3 a 1,4 per caso?

+2

Grazie - tutto risolto. Questo era un problema di aggiornamento 1.3 -> 1.4. Pulito e reinstallato Django e tutto andava bene. – bzo

+1

Un altro suggerimento è quello di verificare le impostazioni usando: echo $ DJANGO_SETTINGS_MODULE - se questo è impostato su qualcosa di inaspettato può causare questo errore. In tal caso, puoi provare a impostarlo solo per questo comando utilizzando: DJANGO_SETTINGS_MODULE = nameofproject.settings ./manage.py runserver – RichVel

+0

@Jonas Per favore dimmi il comando per django 1.7 poiché syncdb non funziona in esso –

3

Quale file settings.py è stato aggiornato? Ho avuto questo stesso identico problema anche all'inizio, quando non ho letto le modifiche di Django dalla 1.3 alla 1.4 che causano il doppio delle importazioni. Ecco un estratto da https://docs.djangoproject.com/en/1.4/releases/1.4/#updated-default-project-layout-and-manage-py. L'ultima versione di Django (attualmente 1.4.2) viene fornita con un layout di progetto predefinito aggiornato e il file manage.py per il comando di gestione di startproject e il layout del progetto predefinito è cambiato.

Per correggere l'errore, il file settings.py corretto da utilizzare NON è quello nella directory del progetto principale, è quello all'interno della directory che viene creato all'interno della directory del progetto (con lo stesso nome).

4

ci sono due file 'settings.py' nel progetto (se il sistema operativo è UNIX-like):

  • Uno è nella prima dir
  • Uno è nella directory/dir

È necessario scrivere il MOTORE al secondo (dir/dir/setting.py).

Buona fortuna!

0

Reinstallare Django ha fatto il trucco per me (in realtà rimuovendo il file uovo), come suggerito nel seguente link. https://code.djangoproject.com/ticket/18058 Sembra che l'aggiornamento da 1.3 a 1.4 sembra causare molti di questi problemi.

12

Per quanto mi riguarda, ho avuto un problema simile con Django 1.6 solo ora:

SFONDO

Django progetto 1.6 Heroku utilizzando database di Heroku Postgresql

ho voluto sviluppare direttamente sul server PostgreSQL (quindi non copiare il ".postgresql_psycopg2" bit se non stai utilizzando anche PostgreSQL)

  • Nessun problema in via di sviluppo con il db psql locale
  • Got che errore quando ho commentata la linea da utilizzare Heroku db

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

Iniziale tentativo di aggiungere ulteriori dettagli, come un'altra linea,

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

Questo non ha funzionato, perché poi l'errore mi ha chiesto di NOME, che ha rifiutato.

SOLUZIONE

Alla fine, questo risolto:

  1. correvo "Heroku config" per vedere i miei dati presentati a me nel formato:

    postgres://user:[email protected]/dbname 
    
  2. Ho aggiornato il file settings.py per riflettere quei dettagli:

    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',      
        } 
    } 
    

    Questo suggerimento è da https://stackoverflow.com/a/19719966/870121

    Nota: il mio prossimo piano è quello di astrarre questi di nuovo in .env variabili piuttosto che lasciarli visibili nella settings.py

  3. Ho poi commentato la linea più tardi,

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

    così DATABASE è stato specificato solo una volta nel file settings.py

    in questo modo la programma di leggere tutto il necessario per la connessione a Heroku PostgreSQL db

    ad esempio, ora python manage.py syncdb sta lavorando per me


Se volete provare sviluppo localmente, commentare tutto sopra e invece impostare il tuo server locale postgresql che va e decommenta l'equivalente locale di quanto sopra:

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

Quello è per m https://stackoverflow.com/a/25962586/870121

+0

grazie, è stato molto utile per me! (ha funzionato bene su heroku, ma non localmente ...) – Hoff

+0

la documentazione di heroku è così estesa che confonde – 82din

Problemi correlati