Как настроить параметры Django для разных сред модульным способом?

#python #django #wsgi #django-settings

#python #django #wsgi #django-настройки

Вопрос:

Я уже искал в Интернете по этому вопросу, но, похоже, они не применимы к моему случаю.

У меня есть 3 разных конфигурационных файла — Dev, Staging, Prod (конечно)

Я хочу правильно модулировать настройки без повторений. Итак, я сделал base_settings.py и я импортирую его в dev_settings.py , stg_settings.py и т. Д.

Проблема — Как правильно вызывать скрипты в каждой среде с минимальными изменениями?

Прямо сейчас я делаю это (взяв в качестве примера dev env)-

python manage.py runserver —настройки=core.dev_settings

Это работает до сих пор, но я не уверен, насколько это хороший обходной путь. Потому что wsgi.py и еще пара других сервисов имеют —

os.environ.setdefault(‘DJANGO_SETTINGS_MODULE’, ‘core.settings’)

Я хочу что-то сделать, не изменяя конфигурационные файлы других сервисов. Заранее спасибо всем.

PS — Я старался быть как можно более понятным, но, пожалуйста, извините меня, если что-то неясно.

Ответ №1:

Просто установите DJANGO_SETTINGS_MODULE в переменных среды желаемый конфигурационный файл.

Это не заставит вас изменять какие-либо другие файлы конфигурации служб, и вам даже не нужно изменять файлы настроек django.

Комментарии:

1. Спасибо за быстрый ответ! У меня есть небольшое сомнение в качестве дополнения к этому. Если я запускаю gunicorn вместо managy.py , как указать соответствующий файл настроек?

2. @NirlenduSaha да, если вы запустите его с помощью gunicorn, он будет использовать ваш файл .wsgi, а затем будет искать в DJANGO_SETTINGS_MODULE переменной среды, и если ее нет, она будет установлена core.settings для вашего примера.

3. Я попробовал ваш подход. Экспортировал DJANGO_SETTINGS_MODULE=’core.settings.local’ echo $$DJANGO_SETTINGS_MODULE

4. Сделал это в makefile, но, как ни странно, он там не установлен. Но если я сделаю это в cmd отдельно, проблем не будет. Вы знаете, как / почему это происходит? На всякий случай я использую mac.

5. @NirlenduSaha Убедитесь, что эта переменная среды должна быть установлена при перезапуске вашего сервера. Это тот же подход к настройке SECRET_KEY , вы должны получить это значение из среды. В принципе, вы можете использовать virtualenvwrapper.

Ответ №2:

Взгляните на пакет конфигураций Django.

Комментарии:

1. Вау. Это выглядит мило, может быть именно то, что мне нужно. Я проверю этот модуль. Спасибо за ответ! 🙂