Попробуйте избежать этой проблемы, поместив конфигурацию Django в переменные окружения с разумными значениями по умолчанию settings.py
. Наша команда перешла на эту технику после прочтения Приложения с двенадцатью факторами .
Варианты Env легко переключать между развертываниями без изменения кода; в отличие от конфигурационных файлов, существует небольшая вероятность того, что они случайно попадут в репозиторий; и в отличие от пользовательских файлов конфигурации или других механизмов конфигурации, таких как Свойства системы Java, они не зависят от языка и ОС.
Вот пара примеров из нашего settings.py
, которые начинаются с разумного значения по умолчанию, а затем читают переменную среды, чтобы проверить переопределения.
EMAIL_HOST = os.environ.get("MYAPP_EMAIL_HOST", "localhost")
# This is a list of lists in JSON, for example:
# export MYAPP_ADMINS='[["Your Name", "your_email@example.com"]]'
ADMINS = json.loads(os.environ.get("MYAPP_ADMINS", "[]"))
При выборе значений по умолчанию подумайте о том, чтобы облегчить настройку проекта для нового разработчика, а также о том, как сделать проект безопасным по умолчанию.
Вы можете видеть, что пример EMAIL_HOST
представляет собой простую строку, а пример ADMINS
загружает дополнительную структуру из строки JSON. Более сложные настройки, такие как LOGGING
, вероятно, неудобны для загрузки из переменной среды. Либо загрузите небольшие фрагменты параметра из переменных среды, таких как уровень ведения журнала, либо используйте переменную среды, чтобы передать путь в файл JSON, YAML или INI. Лично я предпочитаю YAML, а не JSON, потому что вы можете включать комментарии.