2014-11-01 3 views
2

Я следую за подходом в Два совпадающих Django: лучшие практики для Django 1.6 относительно нескольких файлов настроек. Я использую Django 1.7 и virtualenvwrapper.Выбор правильного файла настроек для использования в Django

Моя установка выглядит следующим образом:

project/ 
    app1/ 
    app2/ 
    project/ 
     __init__.py 
     settings/ 
      __init__.py 
      base.py 
      local.py 
      production.py 
    manage.py 

Я немного запутался, как Django знает, какие параметры файла для использования. Я не хочу указывать файл настроек каждый раз при запуске manage.py. Я бы скорее хотел бы установить переменную окружения DJANG_SETTINGS_MODULE, как описано в omouse Anser here:

Что меня смущает в файле wsgi.py есть строка:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings.production") 

Является ли этот файл используется только в производственный сервер? Что произойдет, если у меня уже есть переменная окружения DJANGO_SETTINGS_MODULE, определенная на сервере?

При запуске локально я понимаю, что каждый раз, когда я открываю консоль, мне нужно установить переменную env DJANGO_SETTINGS_MODULE. Я прочитал here, что я могу определить крюк postactivate в virtualenvwrapper. Затем этот крючок создает переменные окружения, которые я требую каждый раз, когда я активирую среду.

Является ли это рекомендуемым способом обеспечения правильной переменной env DjANGO_SETTINGS_MODULE на моей локальной машине? Нужно ли мне также настроить аналогичный файл на моем сервере хостинга? Я планирую использовать PythonAnywhere для хостинга.

И, наконец, если я запустил промежуточный сервер, как я могу сказать Django загрузить файл настроек этапа? Промежуточный сервер практически такой же, как и на производственном сервере, поэтому я предполагаю, что для промежуточного сервера нужен другой файл wsgi.py, но это похоже на анти-шаблон.

ответ

2

os.environ.setdefault только устанавливает значение, если оно не установлено. Когда вы запускаете производство, экспортируйте переменную окружения DJANGO_SETTINGS_MODULE и установите ее в свой файл настроек производства/постановки, и вам не нужно ничего устанавливать при запуске в разработке (если вы установите его по умолчанию для ваших настроек разработки). Это метод DRY-est.

Метод с local_settings.py (который в большинстве случаев не используется в репо!) Не является лучшей практикой и его следует избегать.

+0

Я определенно хочу, чтобы все файлы настроек в репо. И согласны ли вы с наилучшим подходом к установке переменной env для DJANGO_SETTINGS_MODULE локально, чтобы создать крюк postactivate в virtualenvwrapper? – Johan

+0

Локально вам не нужно устанавливать переменную окружения, так как по умолчанию должны быть ваши локальные настройки. На рабочем сервере я рекомендую использовать комбинацию supervisor + gunicorn. Задайте переменную среды в скрипте, который запускает приложение, и вам больше не нужно его устанавливать. – Peter

+0

Если переменная env DJANGO_SETTINGS_MODULE не установлена ​​локально, как Django знает, какой файл настроек использовать? – Johan