Управление несколькими файлами settings.py
Возможный дубликат:
Как управлять настройками локального или производственного процесса в Django?
Мне удалось успешно выполнить проект Django на веб-сервере Apache с mod_wsgi
.
Мне бы хотелось получить рекомендации по управлению несколькими settings.py
файлами. Сейчас у меня есть одна для разработки и одна совершенно другая для производства (относительно параметров БД, локализации статического контента и тому подобного). Мой файл settings.py
имеет версию (не знаю, является ли это хорошей практикой), и я развертываю его с чем-то вроде:
$ hg archive myproject.tbz2
$ cd /path/of/apache/web/project/location
$ bzip2 -db /home/myself/myproject/myproject.tbz2 | tar -xvf -
Работает нормально. Но я обнаружил, что манипулирую несколькими файлами settings.py
.
Я думаю, мой вопрос: какие лучшие практики при развертывании проектов DJANGO в отношении нескольких версий файлов settings.py
?
Ответы
Ответ 1
Я использую модуль настроек, который не является одним файлом:
settings/
__init__.py
_base.py
_servers.py
development.py
production.py
testing.py
Файл __init__.py
прост:
from _servers import get_server_type
exec("from %s import *" % get_server_type())
Файл _base.py
содержит все общие настройки для всех типов серверов.
В файле _servers.py
содержится функция get_server_type()
, которая использует socket.gethostname()
для определения того, какой тип сервера является текущей машиной: он возвращает development
, production
или testing
.
Затем другие файлы немного похожи (production.py
):
DEBUG=False
TEMPLATE_DEBUG=False
from _base import *
В каждом из этих файлов я устанавливаю параметры, которые применяются только к этому типу сервера.
Ответ 2
Трюк, который кажется наиболее распространенным, заключается в том, чтобы поддерживать файл settings.py и local_settings.py(один для каждой среды).
Агностические параметры среды перейдите в settings.py и внизу файла, вы будете импортировать из local_settings.py
try:
from local_settings import *
except ImportError:
pass
Вы можете переопределить любые параметры settings.py в соответствующем файле local_settings.py
Ответ 3
django-admin.py/manage.py оба принимают параметр --settings=mysite.settings
. В разработке вы можете явно указать --settings=dev_settings
. Вы также можете установить переменную среды DJANGO_SETTINGS_MODUL
E в настройке apache.
Лично я просто не проверяю settings.py. Вместо этого я проверяю несколько файлов настроек (dev_settings, prod_settings и т.д.) И символически свяжу их с параметрами settings.py. Таким образом, если я просто проверю свое приложение, он не будет запущен, пока я не подумаю о том, какой файл настроек подходит и фактически помещает этот файл настроек на место.
Другое предложение, которое я слышал, но мне не особенно нравится, имеет параметр settings.py, который динамически импортирует dev_settings.py, если он существует. Хотя это может быть более удобно, я был бы обеспокоен тем, что сложнее прочитать settings.py и узнать, какие настройки будут на самом деле, и не будет искать переопределяющие значения в файле dev_settings.py, который может или не может существовать.
Ответ 4
Мой предпочтительный способ - загрузить отдельный файл ini с помощью ConfigParser, основанный на одиночной настройке или переменной окружения. В любом случае в django wiki существует много разных опций: http://code.djangoproject.com/wiki/SplitSettings