咪哥,酷爱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 ,注释掉测验环境的。

以上场景,会遇到一个问题,人都有犯错不细心的时分,假如忘了注释修正相应的装备,打包上传晋级后,就会影响到出产环境,形成一些不必要的丢失。

灵敏装备的思路

有种思路能够很轻松地处理这种问题,便是不要将一切环境都写在同一个装备文件里,尽或许的把装备文件依照环境不同进行拆分。尽管或许项目中的装备文件会许多,可是百分之百的正确总比多装备文件要稳。

例如下图的一个项目小比如,同一个项目所依靠的文件,分为三种环境,一个是默许用到的装备文件,一个是本地开发用到的装备文件,还有一个是出产上用到的装备文件:

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 字段,将之读取到,读取当时体系环境变量装备的值,掩盖原有装备文件。

这么解说代码或许不是很理解,持续来看下,此处环境变量是指的什么?

02.png
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

 者 



长按扫码鼓舞作者

点 击 投 稿


热 门 推 荐

为你的Python程序加密

爬取豆瓣电影榜单构建常识图谱

用Python剖析《都挺好》中的人物联系

用Pandas库完成MySQL数据库的读写

引荐Python中文社区旗下的几个服务类大众号

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

推荐阅读