Выбор правильного файла настроек для использования в Django

Я следую подходу, описанному в Two Scoops of Django: Best Practices for Django 1.6 в отношении нескольких файлов настроек. Я использую Django 1.7 и virtualenvwrapper.

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

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 здесь:

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

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

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

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

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

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


person Kritz    schedule 01.11.2014    source источник


Ответы (1)


os.environ.setdefault устанавливает значение только в том случае, если оно не установлено. Когда вы работаете в рабочей среде, экспортируйте переменную среды DJANGO_SETTINGS_MODULE и установите ее в файл настроек рабочей/промежуточной среды, и вам не нужно ничего устанавливать при работе в разработке (если вы установили ее по умолчанию в свои настройки разработки). Это самый СУХОЙ метод.

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

person Peter    schedule 01.11.2014
comment
Я определенно хочу, чтобы все файлы настроек были в репо. Согласны ли вы с тем, что лучший подход к локальной настройке переменной окружения DJANGO_SETTINGS_MODULE — создать хук после активации в virtualenvwrapper? - person Kritz; 01.11.2014
comment
Локально вам не нужно устанавливать переменную среды, так как по умолчанию должны быть ваши локальные настройки. На рабочем сервере я рекомендую использовать комбинацию супервизора + пушки. Установите переменную среды в скрипте, который запускает приложение, и вам больше не придется ее устанавливать. - person Peter; 01.11.2014
comment
Если переменная окружения DJANGO_SETTINGS_MODULE не установлена ​​локально, как Django узнает, какой файл настроек использовать? - person Kritz; 01.11.2014
comment
Для разработки отлично подойдет хук postactivate, но вам могут помочь и другие инструменты, такие как honcho, foreman или envdir. Для производства, вероятно, проще установить переменные с помощью supervisord. См. blog.doismellburning.co. Великобритания/2014/10/06/ - person dukebody; 01.11.2014
comment
@Johan в вашем файле WSGI будет использовать производственный файл, а при использовании manage.py по умолчанию используется {{projectname}}.settings. django-admin.py, вероятно, потерпит неудачу. - person dukebody; 01.11.2014