Неправильно настроенная переменная окружения DATABASE_NAME
Я создал файл .env в том же каталоге, что и файл settings.py, и в нем есть некоторые переменные окружения, такие как: секретный_ключ, имя_базы_данных и т.д.. Однако, похоже, что в файле .env имя базы данных считывается неправильно. Мне кажется, что я следовал документации, но все равно получаю ошибку неправильной конфигурации при переносе на Heroku. Хотя при локальном запуске сервера все работает.
settings.py
from pathlib import Path
import os
from datetime import timedelta
import environ
env = environ.Env()
environ.Env.read_env()
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Take environment variables from .env file
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = env('SECRET_KEY')
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = env('DEBUG')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': env('DATABASE_NAME'),
'USER': env('DATABASE_USER'),
'PASSWORD': env('DATABASE_PASSWORD'),
'HOST': env('DATABASE_HOST'),
'PORT': env('DATABASE_PORT'),
}
}
.env (пример)
SECRET_KEY=django-insecure-vdihiodnsdkcndocndcndocdcoidcosjvodjv
DEBUG=True
DATABASE_NAME=vjiojjoj3oj3ioj3
DATABASE_USER=vdijvodivjdivfv
...
error
File "/app/project_name/settings.py", line 94, in <module>
'NAME': env('DATABASE_NAME'),
File "/app/.heroku/python/lib/python3.10/site-packages/environ/environ.py", line 175, in __call__
return self.get_value(
File "/app/.heroku/python/lib/python3.10/site-packages/environ/environ.py", line 371, in get_value
raise ImproperlyConfigured(error_msg)
django.core.exceptions.ImproperlyConfigured: Set the DATABASE_NAME environment variable
документация django-environ: https://github.com/joke2k/django-environ
EDIT: Хорошо, похоже, что проталкивание в Heroku с помощью .env-файла - это не выход. Попробую связать мою github-репо с heroku и настроить vars в настройках. Посмотрим, получится ли это.
Как вы уже догадались, судя по вашей правке, Heroku не поддерживает push .env файлов. Это происходит потому, что она использует эфемерную файловую систему.
Каждый dyno получает свою собственную эфемерную файловую систему, со свежей копией последнего развернутого кода. [...] все записанные файлы будут удалены в момент остановки или перезапуска dyno. Например, это происходит каждый раз, когда dyno заменяется из-за развертывания приложения, и примерно раз в день как часть обычного управления dyno.
.
Вам лучше использовать встроенную в Heroku поддержку config var. Вот несколько примеров:
heroku config # View config vars
heroku config:set TEST=test # Sets TEST to "test"
heroku config:unset TEST # Reverses setting TEST
heroku config:get TEST # Returns value of TEST