如何区分开发测试环境是开发中的一很重要的事情。一般一个线上项目都至少有两个环境(开发环境、生产环境),甚至更多。本文以Python为例,讲讲我在环境控制上遇到的那些坑。

我一开始是使用文件来区分环境的。

1
2
3
4
app/
- main.py
- env.py
- ...

其中env.py只有一行,表明环境类型。

1
env = "dev"

在其他文件中,可以通过import env.env来判断使当前环境。

但这样有一个问题,就是在不同环境中,要确保正确的修改了env.py。我们生产服务器有一次更新代码的时候,因为之前有人临时在服务器上修改了代码,使用了git reset --hard命令, 导致了env.py被重置。整个网站看上去正常,但没有用户能登录上去,因为使用了测试服务器的配置。

利用Git分支控制环境是一种更安全的方法。基本上就是即当前项目在master分支即为正式环境,如果不是则为dev环境(当然也可以不止这些)。隐藏的文件.git/HEAD一般是这样的:

1
2
ref: refs/heads/master

其中,master代表目前项目运行在master分支。这样我们可以修改env.py的代码:

1
2
3
4
5
env = "dev"
with open(".git/HEAD", "rt") as f:
git_head = f.read().split("\n")[0].split("/")[-1]
if git_head == "master":
env = "pro"