2012-04-19 19 views
33

Stworzyłem prosty projekt django 1.4 i próbuję wydać syncdb, aby utworzyć (db) schemat db. Dostaję taki błąd: -"settings.DATABASES jest nieprawidłowo skonfigurowany" błąd wykonywania syncdb z 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. 

Mój plik settings.py wygląda następująco: -

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

mogę połączyć się z bazą danych przy użyciu psql oraz SQL OK - jakieś pomysły? Z góry dziękuję !

+4

Jak wygląda linia 'DATABASES' na wyjściu" ./manage.py diffsettings'? – okm

+1

BAZY DANYCH = {'default': {'ENGINE': "django.db.backends.", "NAME": "", "HOST": "", "USER": "", "HASŁO": "", 'PORT': ''}}. To wygląda nieprawidłowo, prawda? - jak to naprawić? – bzo

Odpowiedz

22

Możliwe, że django nie uzyskuje dostępu do pliku settings.py, który Twoim zdaniem używa. Spróbuj wyraźnie podkreślić Django pliku ustawień z --settings

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

Jeśli to zadziała wtedy, musisz dowiedzieć się, dlaczego Django importuje plik błędnych ustawień.

Czy dokonano aktualizacji z wersji 1.3 na 1.4 przez przypadek?

+2

Dzięki - wszystko ustalone. To był problem aktualizacji 1.3 -> 1.4. Oczyszczone i ponownie zainstalowane django i wszystko było w porządku. – bzo

+1

Kolejną wskazówką jest sprawdzenie ustawień za pomocą: echo $ DJANGO_SETTINGS_MODULE - jeśli jest ustawione na coś nieoczekiwanego, może spowodować ten błąd. Jeśli tak, możesz przetestować ustawienie tylko dla tego polecenia, używając: DJANGO_SETTINGS_MODULE = nazwa_projektu.ustawienia ./manage.py runserver – RichVel

+0

@Jonas Proszę mi powiedzieć polecenia dla Django 1.7 ponieważ syncdb nie działa w nim –

3

Który plik settings.py został zaktualizowany? Na początku miałem ten sam problem, gdy nie czytałem o zmianach Django z wersji 1.3 do 1.4, które powodują podwójne importowanie. Oto fragment z https://docs.djangoproject.com/en/1.4/releases/1.4/#updated-default-project-layout-and-manage-py. Najnowsza wersja Django (obecnie 1.4.2) zawiera zaktualizowany domyślny układ projektu i plik manage.py dla polecenia zarządzania startproject, a domyślny układ projektu został zmieniony.

Aby naprawić swój błąd, prawidłowy plik settings.py, którego powinieneś użyć NIE jest tym z głównego katalogu projektu, jest to ten wewnątrz katalogu, który jest tworzony w katalogu projektu (o tej samej nazwie).

4

Istnieją dwa pliki 'settings.py' w projekcie (jeśli używany jest system operacyjny UNIX-like):

  • Jednym z nich jest w pierwszej reż
  • z nich jest w katalogu/dir

Musisz napisać SILNIK na sekundę (dir/dir/setting.py).

Powodzenia!

0

Ponowna instalacja Django zrobiła dla mnie lewę (właściwie usuwając plik z jajami), zgodnie z sugestią pod poniższym linkiem. https://code.djangoproject.com/ticket/18058 Wygląda na to, że aktualizacja z wersji 1.3 do 1.4 powoduje wiele z tych problemów.

12

Dla mnie, miałem podobny problem z Django 1.6 już teraz:

TŁO

Django projekt 1,6 Heroku użyciu bazy Heroku PostgreSQL

chciałem rozwijać bezpośrednio na serwerze postgresql (więc nie kopiuj ".postgresql_psycopg2" bit, jeśli nie jesteś również za pomocą PostgreSQL)

  • Nie ma problemu rozwija użyciu lokalnego psql oraz SQL db
  • Zrozumiałeś błąd podczas Odkomentowano linię do korzystania Heroku db

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

Pierwsza próba polegała na dodaniu więcej szczegółów, takich jak inna linia,

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

To nie działało jednak, ponieważ wtedy błąd zapytał mnie o nazwę NAME, która została odrzucona.

ROZWIĄZANIE

W końcu to rozwiązać go:

  1. wpadłem "Heroku config", aby zobaczyć moje dane przedstawione mi w formacie:

    postgres://user:[email protected]/dbname 
    
  2. Zaktualizowałem plik settings.py, aby odzwierciedlić następujące szczegóły:

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

    To wskazówka jest od https://stackoverflow.com/a/19719966/870121

    Uwaga: mój następny plan jest abstrakcyjny nich z powrotem do .env zmiennych zamiast zostawiać je widoczny w settings.py

  3. Potem wykomentowane późniejszą linię

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

    więc DATABASES został określony tylko raz w pliku settings.py

    w ten sposób Program czytać wszystko, co niezbędne do połączenia z Heroku postgresql db

    np teraz python manage.py syncdb pracuje dla mnie


Jeśli chcesz spróbować rozwija lokalnie, wypowiedzieć się wszystkiego powyżej zamiast ustawić Twój lokalny serwer PostgreSQL będzie odkomentowane lokalny odpowiednik powyższego:

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

to fro m https://stackoverflow.com/a/25962586/870121

+0

dziękuję, to było bardzo pomocne dla mnie! (działało dobrze na heroku, ale nie lokalnie ...) – Hoff

+0

Dokumentacja heroku jest tak obszerna, że ​​myląca – 82din

Powiązane problemy