web-dev-qa-db-ja.com

「settings.DATABASESは不適切に構成されています」Django 1.4でsyncdbを実行中にエラーが発生しました

簡単なDjango 1.4プロジェクトを作成し、syncdbを発行して(postgres)dbスキーマを作成しようとしています。このエラーが発生しています:-

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.

私のsettings.pyファイルは次のようになります:-

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

Psql OKを使用してデータベースに接続できます-アイデアはありますか?前もって感謝します !

36
bzo

Djangoは、使用すると思われるsettings.pyファイルにアクセスしていない可能性があります。 --settingsを使用して、明示的にDjangoを設定ファイルにポイントしてみてください

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

これが機能する場合、Djangoが間違った設定ファイルをインポートしている理由を把握する必要があります。

偶然1.3から1.4にアップグレードしましたか?

25
Jonas Geiregat

私にとっては、Django 1.6で今すぐ同様の問題がありました:

[〜#〜] background [〜#〜]

Heroku Postgresqlデータベースを使用したDjango 1.6 herokuプロジェクト

Postgresqlサーバーで直接開発したかった(したがって、postgresqlも使用していない場合は、「。postgresql_psycopg2」ビットをコピーしないでください)

  • ローカルpsql dbを使用した開発に問題はありません
  • Heroku dbを使用する行のコメントを外したときにそのエラーが発生しました

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

最初の試みは、別の行などの詳細を追加することでしたが、

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

しかし、これは機能しませんでした。エラーが原因でNAMEを要求され、拒否されたためです。

[〜#〜] solution [〜#〜]

最終的に、これはそれを解決しました:

  1. 「heroku config」を実行して、次の形式で表示される詳細を確認しました。

    postgres://user:pass@localhost/dbname
    
  2. これらの詳細を反映するようにsettings.pyファイルを更新しました。

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

    そのヒントは https://stackoverflow.com/a/19719966/870121 からです

    注:私の次の計画は、これらをsettings.pyに表示したままにするのではなく、.env変数に抽象化することです

  3. その後、後の行をコメントアウトしました。

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

    そのため、DATABASESはsettings.pyファイルで一度だけ指定されました

    そのようにして、プログラムはpostgresql heroku dbへの接続に必要なすべてを読み取ります

    例:今python manage.py syncdb私のために働いています


locallyの開発を試してみたい場合は、上記のすべてをコメントアウトし、代わりにローカルのpostgresqlサーバーを稼働状態に設定し、上記と同等のローカルのコメントを外します。

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

それは https://stackoverflow.com/a/25962586/870121 からです

14
Mark

プロジェクトに2つの「settings.py」ファイルがあります(OSがUNIXライクの場合):

  • 1つは最初のディレクトリにあります
  • 1つはdir/dirにあります

エンジンを2番目に書き込む必要があります(dir/dir/setting.py)。

がんばろう!

4
zwindy

どのsettings.pyファイルを更新しましたか? Djangoの1.3から1.4への変更が二重インポートの原因となることを読んでいなかったときも、最初はまったく同じ問題がありました。 https://docs.djangoproject.com/en/1.4/releases/1.4/#updated-default-project-layout-and-manage-py からの抜粋です。 Django(現在1.4.2)の最新バージョンには、startproject管理コマンド用の更新されたデフォルトのプロジェクトレイアウトとmanage.pyファイルが付属しており、デフォルトのプロジェクトレイアウトが変更されています。

エラーを修正するために、使用すべき正しいsettings.pyファイルは、メインプロジェクトディレクトリ内のものではなく、プロジェクトディレクトリ内に作成されたディレクトリ内のファイルです(同じ名前)。

再インストールDjangoは、次のリンクで示唆されているように、実際にEggファイルを削除します) https://code.djangoproject.com/ticket/18058 1.3から1.4にアップグレードすると、これらの問題の多くが発生するようです。

0
Adel