settings.py

6 views
Skip to first unread message

d.ak...@gmail.com

unread,
Jul 8, 2008, 11:37:59 AM7/8/08
to Django russian
Добрый день.

Хотел узнать, кто как решает вопрос с разными файлами settings.py на
сервере и на машине, где идет разработка.
У меня сейчас есть переменная ONDEVSERVER, в зависимости от которой
применяется группа настроек для сервера и для разработки. Но это не
очень удобно, т.к. при обновлении версии на сервере приходится каждый
раз залезать в него и менять True на False.

Можно соорудить такую конструкцию:

if sys.platform == 'win32':
ONDEVSERVER = True
else:
ONDEVSERVER = False

Но это, если разрабатывать на виндузе, а сервер будет стоять на другой
системе. Не всегда так бывает.

Интересно, как сделать это красиво =)
Спасибо.

Pashka R.

unread,
Jul 8, 2008, 11:45:39 AM7/8/08
to django-...@googlegroups.com
разруливаю через переменные окружения... на локльном машине выставляю
их в скрипте, который запускает ./manage.py runserver

в settings.py читаю примерно так:
PROJECT_ROOT = environ.get('PROJECT_ROOT',
'/path/to/project/root/on/remote/server')

2008/7/8 d.ak...@gmail.com <d.ak...@gmail.com>:

--
//wbr Pashka R. <pashka....@gmail.com>

Dmitry Shevchenko

unread,
Jul 8, 2008, 11:48:17 AM7/8/08
to django-...@googlegroups.com
В конец settings.py который в svn вставляем

try:
    from settings_local import *
except ImportError, exp:
    pass

и потом на каждой машине в settings_local (пере)доопределяем нужные настройки

2008/7/8 Pashka R. <pashka....@gmail.com>:



--
Best regards, Dmitry Shevchenko.

wiz

unread,
Jul 8, 2008, 2:00:43 PM7/8/08
to django-...@googlegroups.com
Самый правильный способ.

2008/7/8 Dmitry Shevchenko <dmi...@gmail.com>:

--
GNU/Hippie
... ~]# make love

Serge Matveenko

unread,
Jul 8, 2008, 3:50:37 PM7/8/08
to django-...@googlegroups.com
2008/7/8 d.ak...@gmail.com <d.ak...@gmail.com>:

> Хотел узнать, кто как решает вопрос с разными файлами settings.py на
> сервере и на машине, где идет разработка.
> У меня сейчас есть переменная ONDEVSERVER, в зависимости от которой
> применяется группа настроек для сервера и для разработки. Но это не
> очень удобно, т.к. при обновлении версии на сервере приходится каждый
> раз залезать в него и менять True на False.

рядом с settings.py лежит _settings.py и _settings_dist.py

_settings.py в svn:ignore

в settings.py:
import _settings as s
VARIABLE = s.VARIABLE

таким образом переопределяем всё что угодно и только это в локальные значения

_settings_dist.py нужен чтобы хранить дефолтные и примерные значения и
не писать файлик на каждом хосте, где поднимаем приложение


--
Serge Matveenko
mailto:se...@matveenko.ru
http://serge.matveenko.ru/
CTO at Web-Mark
mailto:se...@web-mark.ru
http://www.web-mark.ru/

Alexander Pugachev

unread,
Jul 9, 2008, 3:34:35 AM7/9/08
to django-...@googlegroups.com
import socket
HOSTNAME = socket.gethostname()
if HOSTNAME == "peroksid-laptop":
xxxxxx

в каждом окружении своя ветка со своим содержимым. Но я стараюсь
делать так, чтобы разница была мкасимум в MEDIA_URL.

8 июля 2008 г. 22:50 пользователь Serge Matveenko <se...@matveenko.ru> написал:

Artiom Diomin

unread,
Jul 9, 2008, 3:56:56 AM7/9/08
to django-...@googlegroups.com
On Wed, 2008-07-09 at 10:34 +0300, Alexander Pugachev wrote:
> import socket
> HOSTNAME = socket.gethostname()
> if HOSTNAME == "peroksid-laptop":
> xxxxxx
>
> в каждом окружении своя ветка со своим содержимым. Но я стараюсь
> делать так, чтобы разница была мкасимум в MEDIA_URL.
>

УЖАС!!!!!!!

try:
from settings_local import *

except ImportError:
pass

Serge Matveenko

unread,
Jul 9, 2008, 4:05:59 AM7/9/08
to django-...@googlegroups.com

* - зло

Mikhail Gusarov

unread,
Jul 9, 2008, 4:10:37 AM7/9/08
to django-...@googlegroups.com
Twas brillig at 12:05:59 09.07.2008 UTC+04 when se...@matveenko.ru did gyre and gimble:

>> УЖАС!!!!!!!
>>
>> try:
>> from settings_local import *
>> except ImportError:
>> pass

SM> * - зло

УЖАС!!!!!!!одинодин

P.S.: давайте всё же в упячку список рассылки не превращать? :)

--

Alexander Pugachev

unread,
Jul 9, 2008, 4:17:11 AM7/9/08
to django-...@googlegroups.com
Что такого ужасного? Лучше на каждой машинке держать по
неверсионированному файлику settings_local?
Много чести для двух строчек.

2008/7/9 Artiom Diomin <kro...@gmail.com>:

Artiom Diomin

unread,
Jul 9, 2008, 4:36:51 AM7/9/08
to django-...@googlegroups.com
уж получше чем коммитить доступы к базе/секретный ключ/и т.д. в
репозиторий.

Alexander Pugachev

unread,
Jul 9, 2008, 5:06:02 AM7/9/08
to django-...@googlegroups.com
Секретный ключ - это SECRET_KEY? А что он делает? Это, кажется,
затравка для паролей в contrib/auth?
Доступ к БД лучше просто разрешить нужным хостам, и тогда можно
написать пароль к базе большими буквами на главной странице.

9 июля 2008 г. 11:36 пользователь Artiom Diomin <kro...@gmail.com> написал:

Artiom Diomin

unread,
Jul 9, 2008, 5:19:43 AM7/9/08
to django-...@googlegroups.com
база
кэш
емаил
кастомные сеттинги
(это то что на вскидку вспомнил)

всё это может отличатся на продакшен/девелопмен/в офисе/дома/ноутбуке
и ещё в VCS бывают брэнчи (а уж если не svn а hg/bzr/git какой нибудь)
одновременно можно вести целый набор брэнчей, и везде эти настройки
будут/могут отличатся

d.ak...@gmail.com

unread,
Jul 9, 2008, 5:38:07 AM7/9/08
to Django russian
Спасибо большое всем за ответы!

Пожалуй, сейчас мне удобнее всего будет пользоваться конструкцией
предложенной Александром:
import socket
HOSTNAME = socket.gethostname()
if HOSTNAME == "peroksid-laptop":
xxxxxx

Хотя метод
try:
from settings_local import *
except ImportError:
pass
мне тоже очень нравится.

Спасибо!

Nikolay Panov

unread,
Jul 9, 2008, 5:52:19 AM7/9/08
to django-...@googlegroups.com
На хабре была такая тема: http://habrahabr.ru/blog/django/42808.html
В оной предлагались следующие варианты:

1.
try:
from local_settings import *
except ImportError:
pass

local_settings.py в svn:ignore

2.
SetEnv DJANGO_HOSTING_NAME "webfaction" или SetEnv DJANGO_HOSTING_NAME
"laptop", и внутри единственного settings.py проверки на значение
os.environ.get('DJANGO_HOSTING_NAME', None). Всё в одном месте,
комфортно и удобно, и в SVN-е бэкапится.

Regards,
Nikolay.


2008/7/8 d.ak...@gmail.com <d.ak...@gmail.com>:

Artiom Diomin

unread,
Jul 9, 2008, 6:00:37 AM7/9/08
to django-...@googlegroups.com
On Wed, 2008-07-09 at 13:52 +0400, Nikolay Panov wrote:
> get('DJANGO_HOSTING_NAME', None)

.get('SOME_KEY') и так возвратит None если не указано что то другое ;)

Alexander Pugachev

unread,
Jul 9, 2008, 6:12:49 AM7/9/08
to django-...@googlegroups.com
SetEnv комфортно, удобно, и работает только в mod_python :)

9 июля 2008 г. 13:00 пользователь Artiom Diomin <kro...@gmail.com> написал:

Pashka R.

unread,
Jul 9, 2008, 6:23:33 AM7/9/08
to django-...@googlegroups.com
хм... а кто-то открывает доступ к серверу БД наружу?

2008/7/9 Artiom Diomin <kro...@gmail.com>:

--
//wbr Pashka R. <pashka....@gmail.com>

Alexander Pugachev

unread,
Jul 9, 2008, 7:29:30 AM7/9/08
to django-...@googlegroups.com
Ну кто-то же парится по поводу пароля на базу. Если кто-то парится, то
он боится подключения к ней.
Если он этого боится, то либо он открывает подключение снаружи со
всех хостов, либо на его сервере живёт кто-то кроме него.
Shared hosting и джанго? Оригинально.

9 июля 2008 г. 13:23 пользователь Pashka R. <pashka....@gmail.com> написал:

Nikolay Panov

unread,
Jul 9, 2008, 7:38:27 AM7/9/08
to django-...@googlegroups.com
А что такого? Тот же webfaction довольно неплохое место для dev-версии
проекта. Да и для некоторых prod-версий вполне может сгодиться.

Regards,
Nikolay.


2008/7/9 Alexander Pugachev <alexander...@gmail.com>:

Alexander Pugachev

unread,
Jul 9, 2008, 8:12:23 AM7/9/08
to django-...@googlegroups.com
Ладно, что такого в сохранении пароля к БД и затравки к паролям
пользователей в версионированном файле?

9 июля 2008 г. 14:38 пользователь Nikolay Panov
<nikola...@gmail.com> написал:

Artiom Diomin

unread,
Jul 9, 2008, 8:39:19 AM7/9/08
to django-...@googlegroups.com
Причём тут конекты к базе?!?!

Дома/на дев машине проекты под рутом ходят, на продакшене естественно
нет.
Или вот для тестов вообще SQLite можно пускать.
Опять же, настройки кэша на дев машине просто в файлы складываются на
продакшене в мемкэш.
Сессии по разному обрабатываются. база/файлы/мемкэш/кэш/локмем
Мыльные настройки 99% будут различаться между продакшеном и девом.
и так далее

Есть вещи которые не надо версионировать, которые всегда будут
отличатся, где бы вы их не запускали.

Если вам нравится на разных машинах держать одни и те же настройки,
пожалуйста, только зачем людей путать?

Причём тут сокеты к сеттингам?! Не хватает ещё тридов сюда приплести,
для полного фана :D

Alexander Pugachev

unread,
Jul 9, 2008, 8:50:45 AM7/9/08
to django-...@googlegroups.com
Какая бурная реакция. Видимо, у нас просто немного разный подход.
Я стараюсь разрабатывать в максимально близком окружении. То есть если
на сервер постгрес, то и у меня, и так далее.
А socket просто отдаёт имя хоста без ошибок, ничего хитро выдуманного
тут нет. Если для дела надо, то и триды используют, я сам не писал, но
видел :)

9 июля 2008 г. 15:39 пользователь Artiom Diomin <kro...@gmail.com> написал:

Yuri Baburov

unread,
Jul 9, 2008, 12:59:48 PM7/9/08
to django-...@googlegroups.com
посмотри ещё на http://www.djangosnippets.org/tags/settings/ ;)
мне больше всего нравится http://www.djangosnippets.org/snippets/677/
но бывает, такое делать лень и я использую вариант похожий на твой.

2008/7/8 d.ak...@gmail.com <d.ak...@gmail.com>:

--
Best regards, Yuri V. Baburov, ICQ# 99934676, Skype: yuri.baburov,
MSN: bu...@live.com

Reply all
Reply to author
Forward
0 new messages