Django.core.exceptions.ImproperlyConfigured: settings.DATABASES неправильно настроен. Пожалуйста, предоставьте значение ИМЯ
Я пытаюсь создать приложение с django и postgres с помощью docker-compose, но получаю ошибку с "NAME"
Вот мой settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'POSTGRES_NAME': 'postgres',
'POSTGRES_USER': 'postgres',
'POSTGRES_PASSWORD': env('POSTGRES_PASSWORD'),
'POSTGRES_HOST': 'localhost',
'POSTGRES_PORT': '5432',
}
}
Вот мой docker-compose
version: "3.8"
services:
web:
build: .
container_name: django
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/usr/src/app
ports:
- "8000:8000"
depends_on:
- db
environment:
DATABASE_URL: postgres://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST:$POSTGRES_PORT/$POSTGRES_NAME
env_file:
- .env
db:
image: postgres
container_name: pgdb
ports:
- "5432"
env_file:
- .env
environment:
POSTGRES_USER: $POSTGRES_USER
POSTGRES_PASSWORD: $POSTGRES_PASSWORD
POSTGRES_NAME: $POSTGRES_NAME
Вот мой .env
DEBUG=on
SECRET_KEY=sec
DATABASE_URL=postgres://postgres:pass@localhost:5432/postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=pass
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_NAME=postgres
Откуда взялось это "ИМЯ"?
Спасибо за помощь
В моем коде многое было неправильно. После 6 часов отладки.
Сначала я изменил все свои docker-compose.yml на
version: "3.9"
services:
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
web:
build: ./backend
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/usr/src/app
ports:
- "8000:8000"
depends_on:
- db
В моем settings.py я сделал:
import environ
import os
env = environ.Env(
# set casting, default value
DEBUG=(bool, False)
)
# Set the project base directory
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Take environment variables from .env file
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))
# False if not in os.environ because of casting above
DEBUG = env('DEBUG')
# Raises Django's ImproperlyConfigured
# exception if SECRET_KEY not in os.environ
SECRET_KEY = env('SECRET_KEY')
# Parse database connection url strings
# like psql://user:pass@127.0.0.1:8458/db
DATABASES = {
# read os.environ['DATABASE_URL'] and raises
# ImproperlyConfigured exception if not found
#
# The db() method is an alias for db_url().
'default': env.db(),
}
Затем я создал .env
DEBUG=on
SECRET_KEY=xxx
DATABASE_URL=psql://postgres:123@db:5432/postgres
Затем я вошел в docker, используя
docker ps -a
docker exec -it <container_id> bash
psql postgres postgres
\password postgres
123
123
Затем я переместил свою базу данных
docker-compose exec web python manage.py makemigrations
docker-compose exec web python manage.py migrate