ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value
I am in the midst of setting up my Django project on Heroku. I have been following the documentation, but when I foreman start
I receive an error that I can't quite figure out. I have set up my engine files, but it doesn't seem to want to work.
Full traceback:
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.
Someone suggested using ./manage.py diffsettings
and showing the DATABASES part:
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': {}}}
I can't seem to figure out what it means, but it doesn't look right on the surface.
Here is part of my settings.py
that I think could be relevant to this problem:
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'),
)
Solution 1:
You are using the dj-database-url
module to set DATABASES['default']
. Whatever comes before the line:
DATABASES['default'] = dj_database_url.config()
is meaningless as you replace your database configuration in its entirety. The dj_database_url.config()
loads your database configuration from the DATABASE_URL
environment variable, or returns {}
if the variable is not set.
Judging by your error, you didn't set the DATABASE_URL
at all. Judging by the code preceding the dj_database_url.config()
line, you should not be using the dj_database_url.config()
function at all.
If you did want to use it, at least build a default 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)}
Solution 2:
You can use following setting for localhost
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'DatabaseName',
'USER': 'DatabaseUserName',
'PASSWORD': 'DatabaseUserpassword',
'HOST': 'localhost',
'PORT': '5432',
}
}
Solution 3:
I had the same issue using django-tenant-users
when running the command:
python manage.py setup_dtu_tenants
It was because I had a folder named "settings" inside my project folder at the same level as my settings.py
. After removing this folder, the issue is gone.