背景:我们的代码在开发环境和生产环境,都是同一套代码。包括数据库配置等肯定不同,为了完全相同的代码运行在不同的环境中,我们需要一个方式,让我们的代码根据环境的不同,来走不同的配置。我们开始如下的配置:
我们按只有dev和prod两个环境来做配置,可能有时候会有更多的环境,如开发,测试,生产环境等。
不同的环境nginx配置不同的参数。如开发环境我们配置如下:
location ~ \.php {
root /Root2/TP5/WebRoot/public;
fastcgi_pass 127.0.0.1:10080;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param RUNNING_ENV 'dev';
include fastcgi_params;
}
我们增加 fastcgi_param 参数,让其值为dev,来表示这个nginx是dev环境的。我们代码中读此配置,来做环境切换
增加环境的配置文件,如下
project 应用部署目录
├─application 应用目录(可设置)
│ ├─common 公共模块目录(可更改)
│ ├─index 模块目录(可更改)
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ └─ ... 更多类库目录
│ ├─config 新增的参数目录,可以根据环境自动加载
│ │ ├─dev_config.php
│ │ ├─prod_config.php
│ ├─command.php 命令行工具配置文件
│ ├─common.php 应用公共(函数)文件
│ ├─config.php 应用(公共)配置文件
│ ├─database.php 数据库配置文件
修改原有的config.php
$config = [
// +----------------------------------------------------------------------
// | 应用设置
// +----------------------------------------------------------------------
// 应用调试模式
'app_debug' => true,
///这里省略配置
];
//根据环境配置,读取配置文件
$_ENV = isset($_SERVER['RUNNING_ENV']) ? $_SERVER['RUNNING_ENV'] : 'prod';
$conf_extend = require APP_PATH . "config/{$_ENV}_config.php";
return array_merge($config, $conf_extend);
在dev_config.php中添加需要覆盖的配置
<?php
return [
// +----------------------------------------------------------------------
// | 应用设置
// +----------------------------------------------------------------------
//这里我们只覆盖一个配置
// 应用调试模式
'app_debug' => true,
];
同理,我们把数据库的配置,也修改为此,即可根据nginx的环境配置,来切换环境了。一套代码可以方便地根据环境不同,来自由切换数据库及配置了。
暂无评论
要发表评论,您必须先 登录