Автоматизация сборки для Django - PullRequest
1 голос
/ 12 августа 2011

Я довольно новичок в создании сисадминов для моей разработки и в фреймворке django. Я хочу иметь другое имя пользователя / пароль для локальной станции разработчика и для моей производственной среды.

Я использую dotcloud в качестве сервера. Я могу написать скрипт после установки (на python, bash и т. Д.), И он будет запускаться при каждом новом нажатии.

Однако я не знаю, как это сделать. Я должен написать это сам? есть ли инструменты автоматизации сборки python / django, которые помогут мне в этом?

Уточнение : как я могу изменить debug=false в settings.py на true только на сервере?

Ответы [ 2 ]

3 голосов
/ 12 августа 2011

Стандартным способом django является использование переменной окружения DJANGO_SETTINGS_MODULE. Укажите разные настройки и позвольте обоим импортировать модуль общих настроек для общих вещей:

# settings_production.py

from settings_common import *
DEBUG = False
DATABASES = {...}


# settings_development.py

from settings_common import *
DEBUG = True
DATABASES = {...}


# settings_common.py

INSTALLED_APPS = (...) # etc

Вы также можете использовать альтернативную стратегию использования одной основной настройки и импорта имен из другой в зависимости от состояния системы, например, получить os.platform.node() или socket.gethostname() и переключить это значение (или его часть). *

reversed_hostname_parts = socket.gethostname().split('.').reverse()
host_specific = {
    ('com', 'dotcloud'): 'production',
    ('local'): 'dev',
}

for index in range(len(reversed_hostname_parts)):
    identifier = tuple(reversed_hostname_parts[:index+1])
    if identifier in host_specific:
        extra_settings = host_specific[identifier]
        break
else: # executed when the loop has not been `break`ed
    extra_settings = 'dev'  # any default value


if extra_settings == 'dev':
    from development_settings import *
elif extra_settings == 'production':
    from production_settings import *

РЕДАКТИРОВАТЬ: добавлена ​​ссылка

См. https://code.djangoproject.com/wiki/SplitSettings для других стратегий.

1 голос
/ 12 августа 2011

Обычно я импортирую свои параметры разработки в конце производственного файла settings.py, если мой проект находится в структуре локальной директории.

Вы также можете хранить настройки вашей БД и другие настройки, которые отличаются в производстве и разработке, в отдельном файле и удалять их из SVN, Git того, что вы используете.

Просто добавьте это в конце ваших настроек.py:

try:
  from myapp.specific_settings import *
except ImportError:
  pass

В этом случае значения specific_settings будут отличаться в среде производства и разработки.

Если вы хотите динамически выбирать между серверами разработки и производственными серверами, используйте это в конце настроек:

import os
directory = os.path.dirname(__file__)
if directory == '/home/yourname/development/':
    from myapp.development_settings import *
else:
    from myapp.production_settings import * 

Обратите внимание, что я написал это на моей голове, и там могут быть некоторые ошибки. Я проверю это, когда пойду домой.

...