Мне нравится текущий ответ. И... мне кажется, что в "реальном мире" есть более чистый способ. Использование функции заголовка раздела НЕОБХОДИМО, если вы делаете проект любого размера или масштаба, особенно в области «множественных» сред. Я хотел поместить его сюда с хорошо отформатированным копируемым кодом, используя надежный пример из реального мира. Это работает в Ubuntu 14, но работает кроссплатформенно:
Простой пример реального мира
Конфигурация «на основе среды»
Пример настройки (терминал):
cd ~/my/cool/project touch local.properties touch environ.properties ls -la ~/my/cool/project -rwx------ 1 www-data www-data 0 24 января 23:37 local.properties -rwx------ 1 www-data www-data 0 24 января 23:37 environ.properties
Установите хорошие разрешения
>> chmod 644 local.properties
>> chmod 644 env.properties
>> ls -la
-rwxr--r-- 1 www-data www-data 0 Jan 24 23:37 local.properties
-rwxr--r-- 1 www-data www-data 0 Jan 24 23:37 environ.properties
Отредактируйте файлы свойств.
ФАЙЛ 1: local.properties
Это ВАШ файл свойств, локальный для вашего компьютера и рабочей области, и он содержит конфиденциальные данные, не передавайте их в систему управления версиями!!!
[global]
relPath=local/path/to/images
filefilters=(.jpg)|(.png)
[dev.mysql]
dbPwd=localpwd
dbUser=localrootuser
[prod.mysql]
dbPwd=5tR0ngpwD!@#
dbUser=serverRootUser
[branch]
# change this to point the script at a specific environment
env=dev
ФАЙЛ 2: environ.properties
Этот файл свойств доступен всем, изменения передаются в систему управления версиями
#----------------------------------------------------
# Dev Environment
#----------------------------------------------------
[dev.mysql]
dbUrl=localhost
dbName=db
[dev.ftp]
site=localhost
uploaddir=http://localhost/www/public/images
[dev.cdn]
url=http://localhost/cdn/www/images
#----------------------------------------------------
# Prod Environment
#----------------------------------------------------
[prod.mysql]
dbUrl=http://yoursite.com:80
dbName=db
[prod.ftp]
site=ftp.yoursite.com:22
uploaddir=/www/public/
[prod.cdn]
url=http://s3.amazon.com/your/images/
Файл Python: readCfg.py
Этот скрипт представляет собой многократно используемый фрагмент для загрузки списка файлов конфигурации import ConfigParser import os
# a simple function to read an array of configuration files into a config object
def read_config(cfg_files):
if(cfg_files != None):
config = ConfigParser.RawConfigParser()
# merges all files into a single config
for i, cfg_file in enumerate(cfg_files):
if(os.path.exists(cfg_file)):
config.read(cfg_file)
return config
Файл Python: yourCoolProgram.py
Эта программа импортирует указанный выше файл и вызовет метод read_config
from readCfg import read_config
#merge all into one config dictionary
config = read_config(['local.properties', 'environ.properties'])
if(config == None):
return
# get the current branch (from local.properties)
env = config.get('branch','env')
# proceed to point everything at the 'branched' resources
dbUrl = config.get(env+'.mysql','dbUrl')
dbUser = config.get(env+'.mysql','dbUser')
dbPwd = config.get(env+'.mysql','dbPwd')
dbName = config.get(env+'.mysql','dbName')
# global values
relPath = config.get('global','relPath')
filefilterList = config.get('global','filefilters').split('|')
print "files are: ", fileFilterList, "relative dir is: ", relPath
print "branch is: ", env, " sensitive data: ", dbUser, dbPwd
Вывод
Учитывая приведенную выше конфигурацию, теперь у вас может быть сценарий, который полностью меняет среду, изменяя значение [branch]env в «local.properties». И все это основано на принципах хорошей конфигурации! Ура!
person
Decoded
schedule
25.01.2016