Я занимаюсь разработкой базового приложения. Теперь, на этапе развертывания, стало ясно, что мне нужны как локальные настройки, так и производственные настройки.
Было бы здорово узнать следующее:
- Как лучше всего справляться с настройками разработки и производства.
- Как сохранить такие приложения, как django-debug-toolbar, только в среде разработки.
- Любые другие советы и рекомендации по настройке разработки и развертывания.
Ответы:
В
DJANGO_SETTINGS_MODULE
переменной среды управления , какой файл настроек Django загрузит.Поэтому вы создаете отдельные файлы конфигурации для своих соответствующих сред (обратите внимание, что они, конечно, могут быть как
import *
из отдельного файла «общих настроек»), так и использоватьDJANGO_SETTINGS_MODULE
для управления тем, какой из них использовать.Вот как:
Как отмечено в документации Django:
Итак, предположим, что вы создали
myapp/production_settings.py
иmyapp/test_settings.py
в своем исходном репозитории.В этом случае вы соответственно настроили
DJANGO_SETTINGS_MODULE=myapp.production_settings
бы использовать первое иDJANGO_SETTINGS_MODULE=myapp.test_settings
использовать второе.С этого момента проблема сводится к установке
DJANGO_SETTINGS_MODULE
переменной окружения.Настройка
DJANGO_SETTINGS_MODULE
с помощью скрипта или оболочкиЗатем вы можете использовать сценарий начальной загрузки или диспетчер процессов для загрузки правильных параметров (путем установки среды) или просто запустить его из оболочки перед запуском Django :
export DJANGO_SETTINGS_MODULE=myapp.production_settings
.Обратите внимание, что вы можете запустить этот экспорт в любое время из оболочки - он не должен находиться в вашем
.bashrc
или чем-то еще.настройка
DJANGO_SETTINGS_MODULE
с помощью диспетчера процессовЕсли вам не нравится писать сценарий начальной загрузки, который устанавливает среду (и есть очень веские причины так думать!), Я бы порекомендовал использовать диспетчер процессов:
environment
..env
) .Наконец, обратите внимание, что вы можете использовать
PYTHONPATH
переменную для хранения настроек в совершенно другом месте (например, на производственном сервере, где они хранятся/etc/
). Это позволяет отделить конфигурацию от файлов приложения. Вы можете этого захотеть, а можете и не захотеть, это зависит от структуры вашего приложения.источник
settings.py
файл хранитсяSiteName/settings.py
по умолчанию, если вы поместите свои альтернативные файлы настроек в тот же каталог, строка, добавленная в bin / activate, должна читатьDJANGO_SETTINGS_MODULE="SiteName.test_settings"
В противном случае отличный ответ!DJANGO_SETTINGS_MODULE
чтобы выбрать тот, который вы хотите использовать. Модификацияbin/activate
- это одно, чтобы сделать последнее (TBH, я больше не думаю, что это хорошая идея, поэтому я убрал это), но это не единственный вариант.По умолчанию используйте производственные настройки, но создайте файл с именем
settings_dev.py
в той же папке, что и вашsettings.py
файл. Добавьте туда переопределения, напримерDEBUG=True
.На компьютере, который будет использоваться для разработки, добавьте это в свой
~/.bashrc
файл:Внизу
settings.py
файла добавьте следующее.(Обратите внимание, что импорт
*
в Python обычно следует избегать )По умолчанию производственные серверы ничего не отменяют. Готово!
По сравнению с другими ответами, этот проще, потому что не требует обновления
PYTHONPATH
или настройки,DJANGO_SETTINGS_MODULE
которая позволяет вам работать только над одним проектом django за раз.источник
if os.environ.get('DJANGO_DEVELOPMENT', 'true')
тоже работает. Я упоминаю об этом только потому, что вышеуказанныйis not true
метод не удалось импортировать для меня в Python 3.6.DEV
настройки, что приведет к утечке личных данных на общедоступном сервере. Вы действительно просто хотите проверить,DJANGO_DEVELOPMENT
существует ли переменная среды (т.е.is not None
).settings_dev.py
загружается на сервер.is not None
чек. Такжеos.getenv
есть стенографияОбычно у меня есть один файл настроек для каждой среды и общий файл настроек:
В каждом из моих файлов среды есть:
Это позволяет мне при необходимости переопределить общие настройки (путем добавления изменений под этой строфой).
Затем я выбираю, какие файлы настроек использовать, связывая их с settings.py:
источник
import *
? Вы отключите эту проверку? Я завернул этот импорт вexec()
файл, но тогда у меня не может быть условий для переменных, которые не определены в этом файле, и я не могу изменятьINSTALLED_APPS
переменную, потому что она «не определена»Вот как я это делаю за 6 простых шагов:
Создайте папку в каталоге вашего проекта и назовите ее
settings
.Структура проекта:
Создайте четыре питона файлы внутри
settings
каталога , а именно__init__.py
,base.py
,dev.py
иprod.py
Файлы настроек:
Откройте
__init__.py
и заполните его следующим содержимым:init .py:
Откройте
base.py
и заполните его всеми общими настройками (которые будут использоваться как в производстве, так и в разработке), например:base.py:
Откройте
dev.py
и включите то, что относится к разработке, например:dev.py:
Откройте
prod.py
и включите то, что специфично для производства, например:prod.py:
источник
Создайте несколько
settings*.py
файлов, экстраполируя переменные, которые необходимо изменить для каждой среды. Затем в конце вашего мастер-settings.py
файла:Вы храните отдельные
settings_*
файлы для каждого этапа.Вверху
settings_dev.py
файла добавьте это:Чтобы импортировать переменные, которые вам нужно изменить.
В этой вики-статье есть больше идей о том, как разделить ваши настройки.
источник
settings_prod.py
modname = "%s.settings" % ".".join(__name__.split('.')[:-1])
для получения полного имени модуля, а затемglobals().update(vars(sys.modules[modname]))
. Я считаю, что для меня это хорошо работает. Конечно, отказ от бита о программном определении имени модуля в пользу строки, вероятно, также сработает в большинстве случаев.Я использую потрясающие конфигурации django , и все настройки хранятся в моем
settings.py
:Чтобы настроить проект Django, я просто следил за документами .
источник
Вот используемый нами подход:
settings
модуль для настройки разделен на несколько файлов для удобства чтения;.env.json
файл для хранения учетных данных и параметров , которые мы хотим исключить из нашего мерзавца хранилища, или которые не загрязняют окружающую среду конкретных;env.py
файл , чтобы прочитать.env.json
файлУчитывая следующую структуру:
С
.env.json
как:И
project_name/env.py
:У нас могут быть следующие настройки:
Преимущества этого решения:
.env.json
такими как dev, stagging и production;Я надеюсь, что это поможет, просто дайте мне знать, если вы заметите какие-либо недостатки этого решения.
источник
env
это заменитьdev
, иprod
т.д.? Что находится в старомsettings.py
файле? Что вstorage.py
иdatabase.py
?env.py
файл, чтобы вы могли выбирать, с помощью переменной среды, какой файл загружатьЯ использую следующую файловую структуру:
Так
__init__.py
что это ссылка (ln в unix или mklink в Windows) наlocal.py
или может бытьprod.py
так, чтобы конфигурация все еще вproject.settings
модуле была чистой и организованной, и если вы хотите использовать конкретную конфигурацию, вы можете использовать переменную средыDJANGO_SETTINGS_MODULE
дляproject.settings.prod
, если вам нужно для запуска команды для производственной среды.В файлах
prod.py
иlocal.py
:и
shared.py
файл остается глобальным без конкретных конфигураций.источник
построение ответа cs01:
если у вас возникли проблемы с переменной окружения, установите ее значение в строку (например, я сделал
DJANGO_DEVELOPMENT="true"
).Я также изменил рабочий процесс файла cs01 следующим образом:
Таким образом, Django не нужно полностью читать файл настроек перед запуском соответствующего файла настроек. Это решение пригодится, если вашему производственному файлу нужны материалы, которые находятся только на вашем производственном сервере.
Примечание: в Python 3 к импортированным файлам необходимо добавить
.
(например,from .settings_dev import *
)источник
Если вы хотите сохранить 1 файл настроек, а ваша операционная система разработки отличается от производственной операционной системы, вы можете поместить его в конец файла settings.py:
Подробнее: Как проверить операционную систему в Python?
источник
Кажется, на этот вопрос есть ответ, однако метод, который я использую в сочетании с контролем версий, следующий:
Установите файл env.py в том же каталоге, что и настройки в моей локальной среде разработки, которую я также добавляю в .gitignore:
env.py:
.gitignore:
settings.py:
Я просто считаю, что это работает и намного элегантнее - с env.py легко увидеть наши локальные переменные среды, и мы можем справиться со всем этим без нескольких файлов settings.py или тому подобного. Эти методы позволяют использовать всевозможные локальные переменные среды, которые мы не хотели бы устанавливать на нашем производственном сервере. Используя .gitignore через систему контроля версий, мы также обеспечиваем полную интеграцию всего.
источник
Config
классе внутриenv.py
файла. Тогда вместоimport *
модуля модуль можно импортировать с помощьюfrom env import Config
. Таким образом, вам также не нужно использовать эту ifos.path
check, что значительно упрощает все это.Использовать
settings.py
для производства. В том же каталоге создайтеsettings_dev.py
для переопределений.На машине разработчика запустите приложение Django с помощью:
На прод-машине запускай как будто только что
settings.py
и ничего больше.ПРЕИМУЩЕСТВА
settings.py
(используется для производства) полностью не зависит от того, существуют ли какие-либо другие среды.settings_dev.py
. Не нужно собирать разрозненные конфигурацииsettings_prod.py
,settings_dev.py
иsettings_shared.py
.источник
Для проблемы с настройкой файлов я выбираю копировать
Когда вы запустите django, будет запущен __init__py. На этот раз
settings.py in setting1_dir
буду заменятьsettings.py in Project
.Как выбрать другой env?
__init__.py
напрямую.__init__.py
.__init__.py
прочитать эту переменную.Зачем использовать этот способ?
Поскольку мне не нравится так много файлов в одном каталоге, слишком много файлов запутают других партнеров и не очень хорошо для IDE. (IDE не может найти, какой файл мы используем)
Если вы не хотите видеть все эти детали, вы можете разделить проект на две части.
источник
Я использую другой файл app.yaml для изменения конфигурации между средами в движке облачных приложений Google.
Вы можете использовать это для создания прокси-соединения в своей команде терминала:
https://cloud.google.com/sql/docs/sqlserver/connect-admin-proxy#macos-64-bit
Файл: app.yaml
источник
Это мое решение с разными средами для разработчиков, тестов и продуктов.
источник