Я обычно использую SQLite при разработке Django , но на живом сервере часто требуется что-то более надежное (например, MySQL / PostgreSQL ). Неизменно, есть и другие изменения, которые нужно внести в настройки Django: разные места / интенсивность ведения журнала, пути к мультимедиа и т. Д.
Как вы управляете всеми этими изменениями, чтобы сделать развертывание простым автоматизированным процессом?
Ответы:
Обновление: был выпущен django-configurations , который, вероятно, для большинства людей лучше, чем делать это вручную.
Если вы предпочитаете делать что-то вручную, мой предыдущий ответ все еще применим:
У меня есть несколько файлов настроек.
settings_local.py
- специфичная для хоста конфигурация, такая как имя базы данных, пути к файлам и т. д.settings_development.py
- конфигурация, используемая для разработки, напримерDEBUG = True
.settings_production.py
- конфигурация, используемая для производства, напримерSERVER_EMAIL
.Я связываю все это вместе с
settings.py
файлом, который сначала импортируетsettings_local.py
, а затем один из двух других. Он решает, что загружать, двумя настройками внутриsettings_local.py
-DEVELOPMENT_HOSTS
иPRODUCTION_HOSTS
.settings.py
вызывает,platform.node()
чтобы найти имя хоста компьютера, на котором он работает, а затем ищет это имя хоста в списках и загружает второй файл настроек в зависимости от того, в каком списке он находит имя хоста.Таким образом, единственное, о чем вам действительно нужно беспокоиться, - это поддерживать
settings_local.py
файл в актуальном состоянии с учетом конфигурации конкретного хоста, а все остальное обрабатывается автоматически.Посмотрите пример здесь .
источник
_local
довольно запутанным) и тот факт, что вы не используете модули (настройки /base.py, настройки / local.py, настройки / production.py). Также было бы разумно сохранить это в отдельном репозитории ... еще лучше, безопасный сервис, который обслуживает эту информацию из канонического источника (вероятно, избыточный для большинства) ... чтобы новый хост не требовал новой версии..py
файле и, таким образом, предоставляя каждому хосту доступ к информации о конфигурации каждого другого хоста, вы можете создать шаблон manage.py для использования соответствующих настроек. файл в конфигурации развертывания.Лично я использую один файл settings.py для проекта, я просто ищу имя хоста, на котором он находится (имена хостов на моих машинах разработки начинаются с "gabriel", поэтому у меня есть только это:
то в других частях у меня есть такие вещи, как:
и так далее. Немного менее читаемый, но он отлично работает и избавляет от необходимости манипулировать несколькими файлами настроек.
источник
В конце settings.py у меня есть следующее:
Таким образом, если я хочу переопределить настройки по умолчанию, мне нужно просто поместить settings_local.py прямо рядом с settings.py.
источник
settings_local
результатах вImportError
этоexcept
проглотит его молча.No module named...
vscannot import name...
, но оно хрупкое. Или поместите свой импорт в settings_local.py в блоки try и вызовите более конкретное исключение:MisconfiguredSettings
или что-то в этом роде.У меня есть два файла.
settings_base.py
который содержит общие / стандартные настройки и проверяется в системе управления версиями. У каждого развертывания есть отдельныйsettings.py
, который выполняетсяfrom settings_base import *
в начале, а затем переопределяется по мере необходимости.источник
settings_local.py
этом случаеfrom settings import *
он может переопределить значения вsettings.py
. (settings_local.py
файл необходимо импортировать в концеsettings.py
).Самый простой способ, который я нашел, был:
1) используйте файл settings.py по умолчанию для локальной разработки и 2) создайте файл production-settings.py, начиная с:
А затем просто переопределите настройки, которые отличаются в производстве:
источник
В некоторой степени это связано с проблемой развертывания самого Django с несколькими базами данных, вы можете взглянуть на Djangostack . Вы можете загрузить совершенно бесплатный установщик, который позволяет вам установить Apache, Python, Django и т. Д. В процессе установки мы позволяем вам выбрать, какую базу данных вы хотите использовать (MySQL, SQLite, PostgreSQL). Мы широко используем установщики при внутренней автоматизации развертываний (их можно запускать в автоматическом режиме).
источник
У меня есть файл settings.py во внешнем каталоге. Таким образом, он не будет возвращен в систему контроля версий или перезаписан при развертывании. Я помещаю это в файл settings.py в моем проекте Django вместе с любыми настройками по умолчанию:
Примечание. Это очень опасно, если вы не можете доверять local_settings.py.
источник
В дополнение к нескольким файлам настроек, упомянутым Джимом, я также обычно помещаю две настройки в свой файл settings.py вверху
BASE_DIR
иBASE_URL
устанавливаю путь к коду и URL-адрес базы сайта, все остальные настройки изменяются присоединиться к ним.BASE_DIR = "/home/sean/myapp/"
напримерMEDIA_ROOT = "%smedia/" % BASEDIR
Поэтому при перемещении проекта мне нужно только отредактировать эти настройки, а не искать по всему файлу.
Я также рекомендовал бы обратить внимание на Fabric и Capistrano (инструмент Ruby, но его можно использовать для развертывания приложений Django), которые упрощают автоматизацию удаленного развертывания.
источник
Ну, я использую такую конфигурацию:
В конце settings.py:
И в locale_settings.py:
источник
Столько сложных ответов!
Каждый файл settings.py содержит:
Я использую этот каталог, чтобы установить переменную DEBUG следующим образом (замените директорию, где находится ваш код разработчика):
Затем каждый раз, когда файл settings.py перемещается, DEBUG будет иметь значение False, и это ваша производственная среда.
Каждый раз, когда вам нужны настройки, отличные от тех, что в вашей среде разработки, просто используйте:
источник
Я думаю, что от размера сайта зависит, нужно ли вам отказаться от использования SQLite. Я успешно использовал SQLite на нескольких небольших живых сайтах, и он отлично работает.
источник
Я использую среду:
Я считаю, что это гораздо лучший подход, потому что в конечном итоге вам потребуются специальные настройки для вашей тестовой среды, и вы можете легко добавить их в это условие.
источник
Это более старый пост, но я думаю, что если я добавлю это полезное,
library
это упростит ситуацию.Используйте django-configuration
Быстрый старт
Затем подклассифицируйте включенный класс configurations.Configuration в файле settings.py вашего проекта или в любом другом модуле, который вы используете для хранения констант настроек, например:
Задайте для
DJANGO_CONFIGURATION
переменной среды имя только что созданного вами класса, например~/.bashrc
:export DJANGO_CONFIGURATION=Dev
и
DJANGO_SETTINGS_MODULE
переменную среды в путь импорта модуля, как обычно, например, в bash:export DJANGO_SETTINGS_MODULE=mysite.settings
В качестве альтернативы поставить
--configuration
параметр при использовании команд управления Django вдоль линий по умолчанию Джанго--settings
опции командной строки, например:python manage.py runserver --settings=mysite.settings --configuration=Dev
Чтобы позволить Django использовать вашу конфигурацию, вам теперь нужно изменить ваш скрипт manage.py или wsgi.py, чтобы использовать версии соответствующих стартовых функций django-configurations , например, типичный manage.py с django-конфигурациями будет выглядеть так:
Обратите внимание, что в строке 10 мы не используем общий инструмент,
django.core.management.execute_from_command_line
а вместо негоconfigurations.management.execute_from_command_line
.То же самое относится к вашему wsgi.py файлу , например:
Здесь мы не используем значение по умолчанию
django.core.wsgi.get_wsgi_application
функцию а вместо этогоconfigurations.wsgi.get_wsgi_application
.Это оно! Теперь вы можете использовать свой проект с manage.py и вашим любимым сервером с поддержкой WSGI.
источник
Фактически, вам, вероятно, следует подумать о том, чтобы иметь одинаковые (или почти одинаковые) конфигурации для вашей среды разработки и производства. В противном случае время от времени будут возникать ситуации типа «Эй, это работает на моей машине».
Поэтому, чтобы автоматизировать развертывание и устранить эти проблемы с WOMM, просто используйте Docker .
источник