У меня была другая мысль на эту тему: в массив или хэш заносим как настройки как для developer, так и для production. Затем на девелоперских (или на тестовых) машинах настраиваем переменную среды, равную некоему значению, по которому можно найти соотв. настройки в вышеописанном массиве. Затем при загрузке настроек просто извлекаем их их массива, пользуясь переменной среды как ключом. Игнорить ничего не надо, конфиг можно спокойно заливать с девелоперских и тестовых машин на сервер, на боевом сервере воротить ничего не надо (разумеется, следует предусмотреть вариант, когда переменная среды не установлена).
Раньше я делал примерно похоже на описанный marazm-ом способ, только "ровно наоборот".
Меня абсолютно не устраивал подход, при котором хоть локальный, хоть продакшновый файл с настройками не попадает в репозиторий, поэтому мне надо было сделать так, чтобы каждый из файлов был доступен, попадал в репозиторий, но на каждой из машин срабатывали только актуальные настройки. Поэтому я завёл файлы settings_common.py (содержащие всякие MIDDLEWARE_CLASSES, INSTALLED_APPS и т.п.), а также файлы settings-laptop.py, settings-webfaction.py, settings-dedicated.py, каждый из которых включал специфичные для машины вещи, но помимо этого, делал "from settings_common import *". И последним пунктом, на каждой машине я просто делал симлинк с settings.py на нужный из settings-*.py.
Потом мне надоела негибкость этого, и я сделал ровно по-твоему. SetEnv DJANGO_HOSTING_NAME "webfaction" или SetEnv DJANGO_HOSTING_NAME "laptop", и внутри единственного settings.py проверки на значение os.environ.get('DJANGO_HOSTING_NAME', None). Всё в одном месте, комфортно и удобно, и в SVN-е бэкапится.
Да сколько угодно!
http://code.djangoproject.com/wiki/SplitSettings
http://www.davidcramer.net/code/django/107/deploying-django.html
http://www.technobabble.dk/2007/aug/16/managing-local-settings-django/
Symfony с самого начала создания проекта позволяет запускать/тестить его в dev и prod конфигурациях. Плюс можно свои конфигурации создовать.. Хм, не врут получается, когда пишут что взяли лучшее из других фреймворков. :)
Буквально вчера отказался участвовать в проекте, в котором в сеттингах было наворочено чего-то страшное - от выбора конфигурации в зависимости от имени машины и до кусков SQL каких-то. Остальное вроде выглядело поприличнее - тестами покрыто, не то чтобы страшно написано, но ощущение какое-то гнетущее производило :)
у меня всегда две ветки разработки: production и development. это совершенно разные «папки» и, соответственно, конфиги они используют разные.
непозволительно мне ковыряться в коде, которым пользуются пользователи.
Мы организовываем настроечки чуть посложнее:
settings_base.py, целиком:
# Здесь описываем настройки, от которых зависят многие другие.
# В большинстве случае в новом экземпляре проекта
# достаточно подправить пути в этом файле.
sys.path.append('путь_до_библиотек_1')
sys.path.append('путь_до_библиотек_2')
Конфигурация. dev vs production