一个灵活的代码配置思路

一个灵活的代码配置思路_第1张图片


咪哥,热爱Python的Java程序员,致力于分享 Python 好玩的事儿。

博客:http://blog.csdn.net/s740556472

本文作者已加入Python中文社区专栏作者计划

前言

在看 Python 的 Flask 框架时,学习到了一个非常有用并且灵活的思想,不知道是不是现在各大互联网公司都是通过此思路实现灵活配置的,反正笔者之前所在的公司不是通过此种方法进行灵活配置的….

业务场景

做 Web 后台的同学们都知道,各家公司在正式上线代码之前都有着不同的环境,比如开发环境、测试环境、验证环境、生产环境等等….对于不同的环境来说,涉及到的配置文件就很头疼,不同环境所对应的配置文件内容也会不一致,生产环境的有生产配置文件对应地址,测试环境的有测试配置文件所对应的地址。

而笔者之前开发时,大家采用的是对同一个配置文件名称里进行修改,比如有个叫 readme.properties 的文件,其中有 url 参数,开发环境的

url = http://127.0.0.1/hello ,

而生产环境则要对应的地址

url = http://10.10.23.1/hello。

这样一来写好两个,开发分支,注释掉生产环境的地址,上生产时,则打开生产的 url ,注释掉测试环境的。

以上场景,会遇到一个问题,人都有犯错不仔细的时候,万一忘了注释修改相应的配置,打包上传升级后,就会影响到生产环境,造成一些不必要的损失。

灵活配置的思路

有种思路可以很轻松地解决这种问题,就是不要将所有环境都写在同一个配置文件里,尽可能的把配置文件按照环境不同进行拆分。虽然可能项目中的配置文件会很多,但是百分之百的正确总比多配置文件要稳。

例如下图的一个项目小例子,同一个项目所依赖的文件,分为三种环境,一个是默认用到的配置文件,一个是本地开发用到的配置文件,还有一个是生产上用到的配置文件:

一个灵活的代码配置思路_第2张图片 01.png

对于这三者配置文件是有个命名规范的,下划线前面是环境的英文名称,而后面则是 setting 。分开之后,要思考的关键是,在引入配置文件处,如何使用代码对其进行一个灵活的控制?

重点思路:设置系统自身的环境变量来控制项目中的环境!

以 Python 代码为例,看下如何灵活的配置,思路是通用的,不论是什么语言,终归是能实现的!

代码如下:

# 读取 config 目录下的 base_setting 文件
self.config.from_pyfile('config/base_setting.py')
# 获取系统环境变量,如果包含了 ops_config ,则读取 ops_config 对应的值
if 'ops_config' in os.environ:
    self.config.from_pyfile(f'config/{os.environ["ops_config"]}_setting.py')

此处是读取 Python 配置文件时的地方,默认加载 base_setting.py 配置文件,如果当前系统环境变量包含 ops_config 字段,将之读取到,读取当前系统环境变量配置的值,覆盖原有配置文件。

这么解释代码可能不是很明白,继续来看下,此处环境变量是指的什么?

一个灵活的代码配置思路_第3张图片 02.png 一个灵活的代码配置思路_第4张图片 03.png
f'config/{os.environ["ops_config"]}_setting.py' 

中的os.environ["ops_config"]获取的就是上面图片红框标注的值。

在 linux 下,对环境变量设置一个

 ops_config=local

这样通过代码中读取到的文件则是 local.setting.py 文件了。

通过此方法,比如在测试环境,则只需要在对应的 linux 机器上设置

ops_config=test

代码中覆盖掉默认的 base.setting,加载的则会是 test.setting 配置文件。

心得

学习到了这个思想的笔者,反正是恍然大悟,原来环境变量还可以这么玩…使用上述思路达到的效果就是项目各环境分开明确,不会引起混乱,升级的时候只需要全升级即可。

编程语言不是问题,主要还是思想呐!

zhi

 支 

chi

 持 

zuo

 作 

zhe

 者 


一个灵活的代码配置思路_第5张图片


长按扫码鼓励作者

点 击 投 稿


热 门 推 荐
为你的Python程序加密
爬取豆瓣电影榜单构建知识图谱

用Python分析《都挺好》中的人物关系
用Pandas库实现MySQL数据库的读写
推荐Python中文社区旗下的几个服务类公众号

一个灵活的代码配置思路_第6张图片

▼ 点击成为社区注册会员          「在看」一下,一起PY!

你可能感兴趣的:(一个灵活的代码配置思路)