分离开发环境与生产环境的配置文件
2015-12-03 15:58
267 查看
前言:遥想从前在4399,老是有人把自己本地的配置文件commit到线上,然后公司的RTX就开始疯狂轰炸过来:“页面出错了!”、“这数据不对啊!”、“领导要用啊快点修复啊啊啊啊啊”,好吧,这我也是醉了……
最近为了新公司、新项目做技术选型,就完整地看了一遍Laraval的文档,由此得到了一个分离开发环境与生产环境配置文件的重要思路。
传统的做法是:不把配置文件纳入版本控制系统,然后在线上写好一份正确的配置文件,这样在上线的时候就不会影响到线上的配置文件。可惜这永远都只是一个理想的状况,在现实的项目中,总是有人看都不看有哪些文件就直接commit,然后就冲突了……
更好的思路是:先写好一份线上的配置文件,然后再判断当前所处的环境来记载相应的本地配置文件,并覆盖对应的项(例如:可利用PHP中的array_merge),这样的话,即使把本地配置文件上传到线上了,由于配置文件的加载是由判断机制来控制的,自然也就不会去记载本地的配置文件。我推荐用HOST名(例如:PHP的全局变量$_SERVER[‘SERVER_NAME’])来判断当前所处的环境,下面以我现在的项目作为例子进行说明:
假设生产环境的域名是xxx.com,而本地测试环境的域名由于写了VHOST,是xxx.local.com
下面看我的配置文件目录:
在本地测试环境下,系统根据$_SERVER[‘SERVER_NAME’],读取到 /config/xxx.local.com/config.php ,并覆盖了 /config/config.php 中的配置项。
而在生产环境下,系统由于读取不到/config/xxx.com/config.php ,因此使用的全是 /config/config.php 中的配置项。
最近为了新公司、新项目做技术选型,就完整地看了一遍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 中的配置项。
相关文章推荐
- php 把秒数转换为时长(h:i:s格式)
- leetcode - Sqrt(x) -- 再看
- MongoDB 通过 DBRef关联查询
- 独立博客网站FansUnion.cn操作2多年的经验和教训以及未来计划
- Linux chmod 文件权限命令
- IOS上 关于状态栏的相关设置(UIStatusBar)
- BZOJ 1041
- C#中string在内存中是如何表示的
- 弱网络下的游戏服务器设计
- PAT(B)1020. 月饼 (25)
- LESS学习笔记(下)
- 单点登录的配置
- kvm libvirt qga 使用和扩展
- LeetCode-Longest Substring Without Repeating Characters
- 【剑指offer】之数组中只出现一次的数字
- Struts2的jar问题
- Layer中自定义属性的动画
- Linux shell实现Mysql异地备份数据库
- 一个容易被忽略的ReportingService超时问题
- Xcode7 网络访问限制