Django на Elastic Beanstalk не обнаруживает переменные среды RDS (переходит к SQLite)Python

Программы на Python
Ответить
Anonymous
 Django на Elastic Beanstalk не обнаруживает переменные среды RDS (переходит к SQLite)

Сообщение Anonymous »

Я развертываю приложение Django в AWS Elastic Beanstalk и подключаю его к базе данных RDS PostgreSQL.
Мои настройки 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',
}
}
Переменные среды Elastic Beanstalk (из консоли)
В разделе «Конфигурация» → «Свойства среды»:

Код: Выделить всё

RDS_DB_NAME=ebdb
RDS_USERNAME=vividvaultdb
RDS_PASSWORD=********
RDS_HOSTNAME=awseb-xxxxx.ap-south-1.rds.amazonaws.com
RDS_PORT=5432
Все переменные хорошо видны в консоли EB.

django.config

Код: Выделить всё

option_settings:
aws:elasticbeanstalk:container:python:
WSGIPath: vividvault.wsgi:application
aws:elasticbeanstalk:environment:proxy:staticfiles:
/static: static
db-migrate.config

Код: Выделить всё

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
.elasticbeanstalk/config.yml

Код: Выделить всё

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 не видит RDS_DB_NAME в os.environ, хотя он определен в конфигурации Elastic Beanstalk.
Из-за этого Django входит в блок else и использует SQLite вместо PostgreSQL.

Вопрос
Почему Elastic Beanstalk отображает переменные среды RDS в консоли, но они недоступны внутри запущенного процесса Django (

Код: Выделить всё

os.environ
)?
Это:
  • Проблема среды контейнера?
  • Связана с .ebextensions?
  • Что-то специфическое для Amazon Linux 2023?
  • Требуется полная версия eb rebuild?
Как правильно обеспечить правильное внедрение переменных среды RDS в приложение Django, работающее на Elastic Beanstalk?

Если нужны дополнительные журналы, я могу их предоставить.

Подробнее здесь: https://stackoverflow.com/questions/798 ... falls-back
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»