Pull to refresh

Конфигурация. dev vs production

Reading time2 min
Views1.9K
Не думаю, что данный топик должен стать откровением для продвинутых Django-кодеров. Но по опыту работы в разных проектах, могу сказать, что многие программисты всёже не в теме.

Итак, любой проект (практически) требует раздельную конфигурацию для девелоперской машины и продакшн сервера. Можно просто сделать два файла конфигурации, но иногда требуется вписать и изменить общие для каждой конфигурации настройки.

Некоторые вставляют кучу if-ов или ещё чего по хуже, опираясь на ip (ужос) или имя машины, но это всё крайне неудобно и захламляет конфигурацию. Для меня это очень сильный довод к неучастию в проекте, т.к. это говорит о качестве всего кода.

В Django сообществе уже приняты негласные стандарты, основанные на опыте многих: создание отдельного файла конфигурации local_settings.py и включение его в конце основной конфигурации, таким образом перезаписывая значения нужных параметров.

Думаю, лучше продемонстрировать.

settings.py
# Конфигурация продакшн сервера (БД)
DATABASE_ENGINE = 'postgresql_psycopg2'
DATABASE_NAME = 'professors'
DATABASE_USER = 'root'
DATABASE_PASSWORD = 'blabla'
DATABASE_HOST = 'localhost'
DATABASE_PORT = ''
# Тут всякая прочая бредятина
# ...
# А вот тут включаем
try:
    from local_settings import *
except ImportError:
    pass

Далее создаём local_settings.py и пишем:
DATABASE_ENGINE = 'postgresql_psycopg2'
DATABASE_NAME = 'professors_v2'
DATABASE_USER = 'developer'
DATABASE_PASSWORD = 'blabla2'

Сразу добавляем local_settings.py в svn:ignore, дабы не ипаться с этим в дальнейшем.

Всё готово. Загружаем проект в svn, делаем на продакшене svn co /var/svn (ну или как у кого). Теперь без особого гемора можно развернуть версию из SVN, при этом у разработчика остаётся достаточное пространство для манёвра в локальной конфигурации.

Это просто, но крайне удобно. Пользуйтесь кто ещё не знал.

Ссылки по теме

Tags:
Hubs:
Total votes 28: ↑26 and ↓2+24
Comments44

Articles