1

前言:遥想从前在4399,老是有人把自己本地的配置文件commit到线上,然后公司的RTX就开始疯狂轰炸过来:“页面出错了!”、“这数据不对啊!”、“领导要用啊快点修复啊啊啊啊啊”,好吧,这我也是醉了……

最近为了新公司、新项目做技术选型,就完整地看了一遍Laraval的文档,由此得到了一个分离开发环境与生产环境配置文件的重要思路。

传统的做法是:不把配置文件纳入版本控制系统,然后在线上写好一份正确的配置文件,这样在上线的时候就不会影响到线上的配置文件。可惜这永远都只是一个理想的状况,在现实的项目中,总是有人看都不看有哪些文件就直接commit,然后就冲突了……

更好的思路是:先写好一份线上的配置文件,然后再判断当前所处的环境来记载相应的本地配置文件,并覆盖对应的项(例如:可利用PHP中的array_merge),这样的话,即使把本地配置文件上传到线上了,由于配置文件的加载是由判断机制来控制的,自然也就不会去记载本地的配置文件。我推荐用HOST名(例如:PHP的全局变量$_SERVER['SERVER_NAME'])来判断当前所处的环境,下面以我现在的项目作为例子进行说明:

假设生产环境的域名是xxx.com,而本地测试环境的域名由于写了VHOST,是xxx.local.com

下面看我的配置文件目录:

/config

/config/xxx.local.com

/config/xxx.local.com/config.php

/config/config.php

在本地测试环境下,系统根据$_SERVER['SERVER_NAME'],读取到 /config/xxx.local.com/config.php ,并覆盖了 /config/config.php 中的配置项。

而在生产环境下,系统由于读取不到/config/xxx.com/config.php ,因此使用的全是 /config/config.php 中的配置项。


array_huang
10.4k 声望6.6k 粉丝