Неправильно настроен: settings.DATABASES неправильно настроен. Пожалуйста, укажите значение ДВИГАТЕЛЯ
Я нахожусь в процессе настройки своего проекта django на heroku. Я следил за документацией, но когда я 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.
Кто-то предложил использовать diffsettings./manage.py и показать часть 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'),
)
Ответ, который точно объясняет, что не так и что происходит, был бы чрезвычайно полезен. Заранее спасибо.
6 ответов
Вы используете dj-database-url
модуль для установки 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)}
Вы можете использовать следующие настройки для localhost
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'DatabaseName',
'USER': 'DatabaseUserName',
'PASSWORD': 'DatabaseUserpassword',
'HOST': 'localhost',
'PORT': '5432',
}
}
Столкнулся с этой проблемой при запуске моих рабочих процессов 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
У меня была такая же проблема с использованием django-tenant-users при запуске команды:
python manage.py setup_dtu_tenants
Это произошло потому, что у меня в папке проекта была папка с именем "settings" на том же уровне, что и у меня settings.py. после удаления этой папки проблема исчезла.
С «Django==3.1.7» я получил ту же ошибку при использовании кода ниже в «settings.py» :
# "settings.py"
from django.db import connection
print(connection.queries) # Causes error
Итак, я удалил «print(connection.queries)» , как показано ниже, после чего ошибка была устранена:
# "settings.py"
from django.db import connection
# print(connection.queries) # Causes error
Почему бы вам не попробовать это:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'yourdatabasename',
'HOST': 'localhost',
'PORT': '',
'USER': 'yourusername',
'PASSWORD': 'yourpassword',
}
}
Затем примените это:
db_from_env = dj_database_url.config()
DATABASES['default'].update(db_from_env)