2012-04-19 5 views
33

Ich habe ein einfaches Django 1.4-Projekt erstellt und versuche, syndbdb zu erstellen, um das (postgres) db-Schema zu erstellen. Ich erhalte diese Fehlermeldung: -"settings.DATABASES ist falsch konfiguriert" Fehler beim Ausführen von Syncdb mit 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. 

Meine settings.py Datei wie folgt aussieht: -

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

ich mit der Datenbank verbinden kann psql OK mit - irgendwelche Ideen? Danke im Voraus !

+4

Wie sieht die Zeile 'DATABASES' in der Ausgabe von' ./manage.py diffsettings' aus? – okm

+1

DATENBANKEN = {'default': {'ENGINE': 'django.db.backends.', 'NAME': '', 'HOST': '', 'USER': '', 'PASSWORT': '', 'HAFEN': ''}}. Das sieht falsch aus oder? - Wie kann das behoben werden? – bzo

Antwort

22

Es kann sein, dass Django nicht auf die Datei settings.py zugreift, von der Sie denken, dass sie sie verwendet. Versuchen explizit django, um Ihre Einstellungen Datei verweisen, indem Sie --settings

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

Wenn dies dann funktioniert, werden Sie haben, um herauszufinden, warum django die falsche Einstellungsdatei importiert.

Haben Sie versehentlich von 1.3 auf 1.4 aktualisiert?

+2

Danke - alle behoben. Dies war ein 1.3 -> 1.4 Upgrade-Problem. Django gereinigt und neu installiert und alles war in Ordnung. – bzo

+1

Ein weiterer Tipp ist es, Ihre Einstellungen zu überprüfen mit: echo $ DJANGO_SETTINGS_MODULE - wenn dies auf etwas unerwartetes eingestellt ist, kann dies zu diesem Fehler führen. Wenn dies der Fall ist, können Sie testen, ob Sie nur diesen einen Befehl verwenden möchten: DJANGO_SETTINGS_MODULE = nameofproject.settings ./manage.py runserver – RichVel

+0

@Jonas Bitte sagen Sie mir den Befehl für django 1.7 seit Syncdb nicht funktioniert –

3

Welche Datei mit der Datei settings.py wurde aktualisiert? Genau dieses Problem hatte ich anfangs auch, als ich nicht über Djangos Änderungen von 1.3 auf 1.4 gelesen habe, die doppelte Importe verursachen. Hier ist ein Auszug aus https://docs.djangoproject.com/en/1.4/releases/1.4/#updated-default-project-layout-and-manage-py. Die neueste Version von Django (derzeit 1.4.2) wird mit einem aktualisierten Standardprojektlayout und der Datei manage.py für den Befehl startproject management ausgeliefert, und das Standardprojektlayout wurde geändert.

Um Ihren Fehler zu beheben, ist die richtige settings.py-Datei, die Sie verwenden sollten, NICHT diejenige im Hauptprojektverzeichnis, sondern diejenige innerhalb des Verzeichnisses, die innerhalb des Projektverzeichnisses (mit dem gleichen Namen) erstellt wird.

4

Es gibt zwei 'settings.py' Dateien in Ihrem Projekt (wenn Ihr OS UNIX-artigen ist):

  • Eine davon ist im ersten dir
  • One im Verzeichnis ist/dir

Sie müssen den ENGINE auf den zweiten schreiben (dir/dir/setting.py).

Viel Glück!

0

Das erneute Installieren von Django hat den Trick für mich gemacht (tatsächlich die Eizelle entfernen), wie im folgenden Link vorgeschlagen. https://code.djangoproject.com/ticket/18058 Es scheint, dass ein Upgrade von 1.3 auf 1.4 eine Menge dieser Probleme verursacht.

12

Für mich, ich hatte ein ähnliches Problem mit django 1.6 gerade jetzt:

HINTERGRUND

Django 1.6 Heroku Projekt mit Heroku Postgresql Datenbank

ich auf dem PostgreSQL-Server direkt entwickeln wollte (also kopiere nicht das ".postgresql_psycopg2" Bit, wenn Sie nicht auch postgresql mit)

  • Kein Problem mit dem lokalen psql db Entwicklung
  • diesen Fehler bekam, als ich die Linie unkommentiert Heroku zu verwenden db

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

Der erste Versuch bestand darin, weitere Details hinzuzufügen, z. B. eine andere Zeile,

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

Das hat aber nicht funktioniert, denn dann hat mich der Fehler nach NAME gefragt, was abgelehnt wurde.

SOLUTION

Am Ende löste dies es:

  1. I "Heroku config" lief meine Details vorgestellt mir im Format zu sehen:

    postgres://user:[email protected]/dbname 
    
  2. Ich habe die Datei settings.py aktualisiert, um diese Details wiederzugeben:

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

    Das Tipp von https://stackoverflow.com/a/19719966/870121 ist

    Hinweis: mein nächster Plan zu abstrakt ist, sie diese wieder in .env Variablen nicht verlassen im sichtbaren settings.py

  3. ich dann die spätere Zeile auf Kommentar,

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

    so wurde DATABASES nur einmal

    diese Weise wird die in der Datei angegeben settings.py Programm alles lesen erforderlich ist, um die postgresql Heroku db

    zB jetzt für mich


python manage.py syncdb arbeitet zu verbinden Wenn Sie versuchen wollen lokal entwickeln, kommentieren Sie alles über und stattdessen setzen Ihr lokaler Postgresql-Server geht und hebt das lokale Äquivalent des oben genannten auf:

Das ist her m https://stackoverflow.com/a/25962586/870121

+0

danke, es war sehr hilfreich für mich! (funktionierte gut auf heroku, aber nicht lokal ...) – Hoff

+0

heroku Dokumentation ist so umfangreich, dass es verwirrend ist – 82din

Verwandte Themen