【问题标题】:ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value配置不当:settings.DATABASES 配置不正确。请提供 ENGINE 值
【发布时间】:2014-11-22 16:32:33
【问题描述】:

我正在 Heroku 上设置我的 Django 项目。我一直在关注文档,但是当我 foreman start 收到一个我无法弄清楚的错误时。我已经设置了我的引擎文件,但它似乎不想工作。

完整追溯:

Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
    utility.execute()
  File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/core/management/base.py", line 242, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/core/management/base.py", line 285, in execute
    output = self.handle(*args, **options)
  File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/core/management/base.py", line 415, in handle
    return self.handle_noargs(**options)
  File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/core/management/commands/syncdb.py", line 57, in handle_noargs
    cursor = connection.cursor()
  File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/db/backends/__init__.py", line 160, in cursor
    cursor = self.make_debug_cursor(self._cursor())
  File "/Users/nir/nirla/venv/lib/python2.7/site-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.

有人建议使用 ./manage.py diffsettings 并显示 DATABASES 部分:

DATABASES = {'default': {'AUTOCOMMIT': True, 'ENGINE': 'django.db.backends.dummy', 'ATOMIC_REQUESTS': False, 'NAME': '', 'TEST_MIRROR': None, 'CONN_MAX_AGE': 0, 'TEST_NAME': None, 'TIME_ZONE': 'UTC', 'TEST_COLLATION': None, 'PORT': '', 'HOST': '', 'USER': '', 'TEST_CHARSET': None, 'PASSWORD': '', 'OPTIONS': {}}}

我似乎无法弄清楚这意味着什么,但表面上看起来并不正确。

这是我的settings.py 的一部分,我认为可能与这个问题有关:

import os
import dj_database_url

ON_HEROKU = os.environ.get('ON_HEROKU')
HEROKU_SERVER = os.environ.get('HEROKU_SERVER')

if ON_HEROKU:
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'postgresql',
        }
    }
else:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
            'USER': '',
            'PASSWORD': '',
            'HOST': '',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
            'PORT': '',  
        }
    }


DATABASES['default'] =  dj_database_url.config()

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

ALLOWED_HOSTS = ['*']

STATIC_URL = '/static/'

# only refers to the location where your static files should end up after running manage.py collectstatic. you shouldn't really need collectstatic) when developing locally
STATIC_ROOT = 'staticfiles'


STATICFILES_DIRS = (    
    os.path.join(BASE_DIR, '../static'),
)

【问题讨论】:

    标签: python django heroku django-postgresql


    【解决方案1】:

    您正在使用dj-database-url module 设置DATABASES['default']。行前的任何内容:

    DATABASES['default'] =  dj_database_url.config()
    

    在您完全替换数据库配置时毫无意义。 dj_database_url.config()DATABASE_URL 环境变量加载您的数据库配置,如果未设置变量,则返回 {}

    根据您的错误判断,您根本没有设置 DATABASE_URL。从dj_database_url.config() 行之前的代码来看,您根本不应该使用dj_database_url.config() 函数

    如果你确实想使用它,至少建立一个默认 URL:

    if ON_HEROKU:
        DATABASE_URL = 'postgresql://<postgresql>'
    else:
        DATABASE_URL = 'sqlite:///' + os.path.join(BASE_DIR, 'db.sqlite3')
    
    DATABASES = {'default': dj_database_url.config(default=DATABASE_URL)}
    

    【讨论】:

      【解决方案2】:

      您可以对 localhost 使用以下设置

      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.postgresql_psycopg2',
              'NAME': 'DatabaseName',
              'USER': 'DatabaseUserName',
              'PASSWORD': 'DatabaseUserpassword',
              'HOST': 'localhost',
              'PORT': '5432',
          }
      }
      

      【讨论】:

      • 你能帮我解决this的问题吗?
      • 但是你可以将它用于生产吗?
      【解决方案3】:

      我在运行命令时使用django-tenant-users 遇到了同样的问题:

      python manage.py setup_dtu_tenants
      

      这是因为我的项目文件夹中有一个名为“settings”的文件夹,与我的settings.py 处于同一级别。删除此文件夹后,问题就消失了。

      【讨论】:

      • 您的答案似乎与@ApathyBear 共享的代码中出现的错误消息不符。请再次阅读问题。
      • 这似乎没有回答这个问题,但它帮助我解决了我的问题。问题在于我的设置有myprojectname/settings/ 文件夹和apps/settings 应用程序
      【解决方案4】:

      在使用 github 操作运行我的 github 工作流时遇到了这个问题。所以我找到了以下解决方法:

      POSTGRES_DB = os.environ.get("POSTGRES_DB") #database name
      POSTGRES_PASSWORD = os.environ.get("POSTGRES_PASSWORD") # database user password
      POSTGRES_USER = os.environ.get("POSTGRES_USER") # database username
      POSTGRES_HOST = os.environ.get("POSTGRES_HOST") # database host
      POSTGRES_PORT = os.environ.get("POSTGRES_PORT") # database port
      
      
      POSTGRES_READY = (
          POSTGRES_DB is not None
          and POSTGRES_PASSWORD is not None
          and POSTGRES_USER is not None
          and POSTGRES_HOST is not None
          and POSTGRES_PORT is not None
      )
      
      print(POSTGRES_READY)
      
      if POSTGRES_READY:
          DATABASES = {
              "default": {
                  "ENGINE": "django.db.backends.postgresql",
                  "NAME": POSTGRES_DB,
                  "USER": POSTGRES_USER,
                  "PASSWORD": POSTGRES_PASSWORD,
                  "HOST": POSTGRES_HOST,
                  "PORT": POSTGRES_PORT,
              }
          }
      

      然后你的.env 文件:

      export DEBUG=True
      export DJANGO_SECRET_KEY=CI_CD_TEST_KEY
      export POSTGRES_USER=taxi
      export POSTGRES_PASSWORD=taxi
      export POSTGRES_DB=pdm
      export POSTGRES_PORT=5432
      export POSTGRES_HOST=localhost
      

      然后运行source .env

      【讨论】:

        猜你喜欢
        • 2013-11-28
        • 1970-01-01
        • 1970-01-01
        • 2017-04-21
        • 1970-01-01
        • 2012-04-08
        • 2020-04-24
        • 2013-01-08
        • 1970-01-01
        相关资源
        最近更新 更多