python 服务配置项管理最佳实践讨论

2014-05-23 18:30:21 +08:00
 onlytiancai
一个服务会运行在各种环境,如开发环境,测试环境,生产环境,
每个环境有不同的配置,为了合理的管理这些配置项,做如下约定

- 默认配置项保存在config.py里,受git管理
- 每个环境有一个独立的config_xxx.py文件,不受git管理, xxx表示环境名
- config_xxx.py里的配置会覆盖掉config.py的配置

不同环境启动程序时修改下`APP_ENV`的环境变量,从而加载不同的配置,如

APP_ENV=dev python app.py
APP_ENV=testing python app.py
APP_ENV=production python app.py

https://github.com/onlytiancai/codesnip/tree/master/python/config
3913 次点击
所在节点    Python
6 条回复
zz1956
2014-05-23 19:55:27 +08:00
线上机器:ln -s config_pro.py config.py
测试机器:ln -s config_test.py config.py
真实使用的config.py不受git管理,不在代码库里。
yueyoum
2014-05-24 09:04:59 +08:00
曾经用的是ls这种。
现在大体差不多,不过不ln了

config.example.xml

上线了 cp.config.example.xml config.xml

then modify
julyclyde
2014-05-24 12:17:26 +08:00
@yueyoum 差挺远的……你这是wordpress那种做法,example文件是不会变的,版本升级后可以对照看看新增什么选项。ln的话就是同一个文件了
openroc
2014-05-24 22:28:23 +08:00
类似,以前写在config.py里,现在写到.cfg里,并且支持命令行,

1. python main.py -f test.cfg (or product.cfg)
2. python main.py --port=8080 (or --port=80)
jamiesun
2014-05-25 09:41:30 +08:00
yaml不是很好吗
onlytiancai
2014-05-26 14:58:08 +08:00
@zz1956 这种用软连接的方式,如果你某次修改了config.py,在线上拉代码时会提示冲突吧,因为你覆盖了config.py

@yueyoum 这种思路不错,就是git里管理一个配置模板样例,我那个思路和这个一样,但只有个性化的配置才需要在config_xx.py里配置,默认项还是在config.py里,不需要完成拷贝一份config.py

@openroc 你这个相当于把配置文件路径当参数传给进程吧,也可以。

@jamiesun yaml和ini都可以,但不太习惯,还是喜欢用.py来做配置,还能写点小逻辑啥的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/113968

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX