Создайте символическую ссылку с помощью setuptools - PullRequest
0 голосов
/ 15 ноября 2018

Джанго никогда не придумал стандартного способа обработки конфигурации.Django по умолчанию помещает его в settings.py в каталоге проекта, что не очень удобно, так как вы не захотите перезаписать файл в /usr/lib/python3/{site,dist}-packages/someproject/ для настройки вашего проекта.Кроме того, файл будет удален после обновления пакета.

Я хотел бы упаковать проект django таким образом, чтобы он работал как минимум с sdist, bdist wheel и bdist deb в linux и включал / создает символическую ссылку из *От 1005 * до /etc/someproject/settings.py.Это кажется невозможным подвигом.

Альтернативой может быть выполнение настроек в /etc/, что выглядит довольно грязно.

1 Ответ

0 голосов
/ 15 мая 2019

Попробуйте избежать этой проблемы, поместив конфигурацию 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, потому что вы можете включать комментарии.

...