Laravel 配置多环境env文件
项目需求不同,要求也不同,这个仅供参考,相互学习,共同进步
前提
主要实现方法是自己提供的useEnvironmentPath(),有兴趣的同学可以去研究下.
每个公司的要求不一样,有的习惯进行条件编译加载配置文件,有的不需要条件编译,怕安全泄露token等关键信息,手动修改配置信息.
像国内小公司基本不怎么分测试环境,正式环境,更没有减振环境,属于直接替换配置文件.所以呢进来看看学习学习.公司遇到过手动修改配置文件,正式上线后整个项目崩溃的情况.调查结果有个配置文件忘记写了.我觉得只要有人手动替换这种操作的,稍不注意就会出问题.
如果你很不细心,这个一定要时刻准备着,准备跑路.
一. 配置env文件夹
删除自带的.env等文件
添加env文件夹
并添加.dev.env, .stage.env, .prod.env文件
二. 修改app.php
//...
//...
//忽略上面代码
$app->singleton(
Illuminate\Contracts\Debug\ExceptionHandler::class,
App\Exceptions\Handler::class
);
/*
|--------------------------------------------------------------------------
| Return The Application
|--------------------------------------------------------------------------
|
| This script returns the application instance. The instance is given to
| the calling script so we can separate the building of the instances
| from the actual running of the application and sending responses.
|
*/
//**********************代码添加到这块*******************************//
/**根据服务器的hostname,加载不同的.env文件
*获取主机名
*这里方式可以根据自己需求修改 可以根据自己域名区分.
*我的这里根据服务器的hostname进行区分
*dev环境hostname:dev-projectname-api-web
*stage环境hostname:stage-projectname-api-web
*prod环境hostname:prod-projectname-api-web
*/
$hostname = gethostname();
//自定义env文件路径
$app->useEnvironmentPath(realpath(__DIR__.'/../env'));
$strProd = 'prod';
$strStage = 'stage';
$strDev = 'dev';
if (strpos($hostname, $strProd) !== false) {
//prod环境
$app->loadEnvironmentFrom('.prod.env');
} elseif (strpos($hostname, $strStage) !== false) {
//stage环境
$app->loadEnvironmentFrom('.stage.env');
} elseif (strpos($hostname, $strDev) !== false) {
//dev环境
$app->loadEnvironmentFrom('.dev.env');
} else {
//其他情况,走dev分支
$app->loadEnvironmentFrom('.dev.env');
}
//**********************代码添加到这块*******************************//
return $app;
本作品采用《CC 协议》,转载必须注明作者和本文链接
你这
app.php
文件是把原来的$app->singleton()
调用也删掉了吗?我们是直接在部署的时候,运维在jenkins里替换.env.prod、.env.test为.env。 跟楼主的思想差不多,最终都是提交了各个环境的配置到git库中
vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables.php::checkForSpecificEnvironmentFile
看意思
laravel
应该是已经默认支持分情况加载.env.development
,.env.production
这种格式的配置文件了我们的做法是每个环境独立一个 env 文件,
.env.dev
、.env.debug
、.env.online
,部署的时候根据不同的环境执行cp .env.xxx .env
。8.5以下版本本来就有了
我多环境框架什么都没改,只修改了 FPM 在 www.conf 当中加入了 env[APP_ENV] = $APP_ENV 就完成了。好像是这样具体记不住了。
我是通过nginx转发的时候指定APP_ENV环境变量的
这个方法用了之后,在业务代码里env()就获取不到 博主env/.dev.env里的配置了
这边文章很优雅的解决laravel 和lumen多.env文件的情况 medium.com/@yazeedobaid/laravel-lu...