Мои настройки Django настроены на использование PostgreSQL только в том случае, если RDS_DB_NAME существует в os.environ, в противном случае оно возвращается к SQLite.
Однако, хотя переменные среды RDS определены в Elastic Beanstalk, Django ведет себя как если их нет, и возвращается к SQLite.
settings.py
Код: Выделить всё
if 'RDS_DB_NAME' in os.environ:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.environ['RDS_DB_NAME'],
'USER': os.environ['RDS_USERNAME'],
'PASSWORD': os.environ['RDS_PASSWORD'],
'HOST': os.environ['RDS_HOSTNAME'],
'PORT': os.environ['RDS_PORT'],
}
}
else:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
В разделе «Конфигурация» → «Свойства среды»:
Код: Выделить всё
RDS_DB_NAME=ebdb
RDS_USERNAME=vividvaultdb
RDS_PASSWORD=********
RDS_HOSTNAME=awseb-xxxxx.ap-south-1.rds.amazonaws.com
RDS_PORT=5432
django.config
Код: Выделить всё
option_settings:
aws:elasticbeanstalk:container:python:
WSGIPath: vividvault.wsgi:application
aws:elasticbeanstalk:environment:proxy:staticfiles:
/static: static
Код: Выделить всё
container_commands:
01_migrate:
command: "source /var/app/venv/*/bin/activate && python3 manage.py migrate"
leader_only: true
option_settings:
aws:elasticbeanstalk:application:environment:
DJANGO_SETTINGS_MODULE: vividvault.settings
Код: Выделить всё
branch-defaults:
main:
environment: vividvault-env
global:
application_name: vividvault-project
default_platform: Python 3.11 running on 64bit Amazon Linux 2023
default_region: ap-south-1
profile: eb-cli
sc: git
workspace_type: Application
Когда я подключаюсь к экземпляру по SSH и открываю оболочку Django:
Код: Выделить всё
eb ssh
cd /var/app/current
source /var/app/venv/*/bin/activate
python3 manage.py shell
Код: Выделить всё
import os
print("RDS_DB_NAME in env:", 'RDS_DB_NAME' in os.environ)
print(os.environ.get("RDS_DB_NAME"))
Код: Выделить всё
False
None
Из-за этого Django входит в блок else и использует SQLite вместо PostgreSQL.
Вопрос
Почему Elastic Beanstalk отображает переменные среды RDS в консоли, но они недоступны внутри запущенного процесса Django (
Код: Выделить всё
os.environЭто:
- Проблема среды контейнера?
- Связана с .ebextensions?
- Что-то специфическое для Amazon Linux 2023?
- Требуется полная версия eb rebuild?
Если нужны дополнительные журналы, я могу их предоставить.
Подробнее здесь: https://stackoverflow.com/questions/798 ... falls-back
Мобильная версия