问题
写项目代码的时候,在配置上容易碰到下面三个问题:
- 多个环境之间存在多套配置,发布时需要单独处理配置信息。
- 配置中存在敏感信息,如数据库连接串,开源代码时需要修改配置。
- 同一台主机上运行多个项目,但都使用到同一个配置,一但发生变更,需要修改多个项目的代码。
解决方案
针对以上两个问题,在《Flask Web开发》 Miguel Grinberg
中找到的解决方案:
使用环境变量来存储关键配置,或者主机相关环境配置信息
示例
如,针对问题1,我们可以按如下步骤解决:
在开发主机上设置环境变量
QindeMacBook-Pro-2:~ echo 'export PYTHON_ENV="dev"' >> ~/.bash_profile QindeMacBook-Pro-2:~ source ~/.bash_profile
这是在Mac上的操作,其它linux系统操作方式类似,可能文件名不太一样,Google一下就可以找到,在此不赘述。
在生产主机上设置环境变量
cm@iZbp13ifgrbntjy6yxbha4Z:~$ echo 'export PYTHON_ENV="prd"' >> ~/profile cm@iZbp13ifgrbntjy6yxbha4Z:~$ source .profile
这是在ubuntu上的操作方法,做参考。
配置代码
import os env = os.environ.get('PYTHON_ENV') if env == 'dev': book_file_folder = "/Users/qin/Documents/tmp/book/" else: book_file_folder = "/home/cm/book/"
这样,在开发的过程中就可以梳理线上的配置,通过环境变量来做开关,发布后不需要修改代码就可以让程序指向生产环境的配置。相同的办法可以用在避免代码中出现敏感配置的场景。