webentwicklung-frage-antwort-db.com.de

"settings.DATABASES ist nicht richtig konfiguriert" Fehler beim Synchronisieren mit Django 1.4

Ich habe ein einfaches Django 1.4-Projekt erstellt und versuche, syncdb auszugeben, um das (postgres) -DB-Schema zu erstellen. Ich erhalte den folgenden Fehler:

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 sieht so aus: -

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 kann mit psql eine Verbindung zur Datenbank herstellen. OK - irgendwelche Ideen? Danke im Voraus !

36
bzo

Möglicherweise greift Django nicht auf die von Ihnen verwendete settings.py-Datei zu. Zeigen Sie explizit Django auf Ihre Einstellungsdatei, indem Sie --settings verwenden

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

Wenn dies dann funktioniert, müssen Sie herausfinden, warum Django die falsche Einstellungsdatei importiert.

Haben Sie versehentlich ein Upgrade von 1.3 auf 1.4 durchgeführt?

25
Jonas Geiregat

Für mich hatte ich gerade ein ähnliches Problem mit Django 1.6:

[~ # ~] Hintergrund [~ # ~]

Django 1.6 Heroku-Projekt mit Heroku Postgresql-Datenbank

Ich wollte direkt auf dem postgresql-Server entwickeln (kopieren Sie also nicht das Bit ".postgresql_psycopg2", wenn Sie nicht auch postgresql verwenden)

  • Kein Problem bei der Entwicklung mit der lokalen psql-Datenbank
  • Ich habe diesen Fehler erhalten, als ich die Zeile zur Verwendung von heroku db auskommentiert habe

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

Der erste Versuch bestand darin, weitere Details hinzuzufügen, z.

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

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

[~ # ~] Lösung [~ # ~]

Am Ende löste dies das Problem:

  1. Ich habe "heroku config" ausgeführt, um meine Angaben im folgenden Format zu sehen:

    postgres://user:[email protected]/dbname
    
  2. Ich habe die settings.py-Datei 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',                     
        }
    }
    

    Dieser Tipp stammt von https://stackoverflow.com/a/19719966/870121

    Hinweis: Mein nächster Plan ist es, diese zurück in .env-Variablen zu abstrahieren, anstatt sie in settings.py sichtbar zu lassen

  3. Ich habe dann die spätere Zeile auskommentiert,

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

    daher wurde DATABASES nur einmal in der Datei settings.py angegeben

    Auf diese Weise las das Programm alles, was für die Verbindung zur postgresql heroku db erforderlich ist

    z. B. jetzt python manage.py syncdb arbeitet für mich


Wenn Sie versuchen möchten, local zu entwickeln, kommentieren Sie alles oben stehende aus und setzen Sie stattdessen Ihren lokalen postgresql-Server in Betrieb.

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

Das ist von https://stackoverflow.com/a/25962586/870121

14
Mark

In Ihrem Projekt befinden sich zwei 'settings.py'-Dateien (wenn Ihr Betriebssystem UNIX-ähnlich ist):

  • Einer ist in der ersten Richtung
  • Einer ist in der Richtung

Du musst den ENGINE auf die Sekunde genau schreiben (dir/dir/setting.py).

Viel Glück!

4
zwindy

Welche settings.py-Datei haben Sie aktualisiert? Genau das gleiche Problem hatte ich auch, als ich nicht über Djangos Änderungen von 1.3 auf 1.4 gelesen habe, die zu Doppelimporten führen. Hier ist ein Auszug aus https://docs.djangoproject.com/de/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 einer aktualisierten Datei manage.py für den Befehl startproject management ausgeliefert, und das Standardprojektlayout wurde geändert.

Um Ihren Fehler zu beheben, ist die korrekte settings.py-Datei, die Sie verwenden sollten, NICHT diejenige im Hauptprojektverzeichnis, sondern diejenige im Verzeichnis, die im Projektverzeichnis erstellt wird (mit demselben Namen).

Neuinstallation Django hat den Trick für mich gemacht (tatsächlich die Egg-Datei entfernt), wie im folgenden Link vorgeschlagen. https://code.djangoproject.com/ticket/18058 Ein Upgrade von 1.3 auf 1.4 scheint viele dieser Probleme zu verursachen.

0
Adel