Я пытаюсь настроить приложение Django/DRF на Elastic Beanstalk, и по какой-либо причине Django просто не может видеть желаемые переменные среды. Когда я войти, я могу видеть, что они просто отлично, с помощьюDjango не видит переменные окружения при развертывании на Elastic Beanstalk
$ eb ssh
$ cat /opt/python/current/env
Я также могу их видеть, за исключением относительно чувствительные, связанных с RDS, просто используя $eb printenv
.
Все, что кажется настроенным и работоспособным. Тем не менее, Django любит читать среду сразу при запуске, и кажется, что переменные окружения просто еще не установлены. Я экспериментировал с просто введением print(os.environ)
в settings.py
, и когда я это делаю, я обнаруживаю целую кучу переменных среды, которые мне не нужны (например, 'SUPERVISOR_GROUP_NAME': 'httpd'
), и ни один из тех, которые я установил сам, например DJ_SECRET_KEY
.
Я с тех пор изменил код, чтобы сообщить об отсутствии конкретных переменных окружения, когда он загружает настройки, и от недавнего бега, он генерировал это:
[Wed Nov 23 15:56:38.164153 2016] [:error] [pid 15708] DJ_SECRET_KEY not in environment; falling back to hardcoded value.
[Wed Nov 23 15:56:38.189717 2016] [:error] [pid 15708] RDS_DB_NAME not in environment; falling back to sqlite
[Wed Nov 23 15:56:38.189751 2016] [:error] [pid 15708] AWS_STORAGE_BUCKET_NAME not in environment; falling back to local static storage.
Опять же, эти переменные устанавливаются в настройки, и они появляются с любым другим инструментом отчетности, который дает EB. Они просто не установлены для Django, чтобы читать их, когда он запускает и читает settings.py
.
This выглядит довольно близко к этой проблеме, но это не совсем то же самое: я знаю, как видеть/загружать переменные среды в оболочку при ssh-ing в eb-экземпляр; они просто не появляются, когда я нуждаюсь в них для фактического проекта.
This - это почти то же самое, что у меня есть, но принятый правильный ответ не имеет для меня никакого смысла, и верхний проголосовавший ответ не применяется; эти файлы уже находятся в git.
Как настроить параметры, чтобы Django мог видеть переменные среды?
Не уверен относительно эластичного бобового стебля, но я столкнулся с подобной проблемой при настройке своих проектов Django с помощью Apache/Nginx. И я должен был установить переменные среды в своих файлах конфигурации. Может быть, это должно быть применимо и здесь. –
Что вы пытаетесь достичь? – Gustaf
@Gustaf Я пытаюсь использовать переменные среды для настройки Django. Например, с учетом ассоциированного экземпляра RDS, EB автоматически устанавливает несколько переменных, таких как 'RDS_DB_NAME', с которыми можно подключиться к этой базе данных. Проблема в том, что эти переменные не заданы во время чтения Django. Решение может быть методом, с помощью которого мы можем задержать инициализацию WSGI до тех пор, пока не будут установлены все переменные среды. В конце концов, все они будут установлены, но, видимо, не скоро. – coriolinus