Lumen 的配置跟 Laravel 有些区别,虽然也能配置 config/app.php 这些,但并不是所有配置都能被覆盖,比如 APP_TIMEZONE,参考:https://stackoverflow.com/a/49431500
默认也只是加载.env 文件,并不支持多 env 环境配置。所以稍加改造实现这个功能: 测试环境:Lumen 6.x
新建配置文件
复制一份 .env.example 并命名为 .env.production 。这份就是用于 production 环境的配置文件。
编辑 bootstrap/app.php
原文件的头几行代码如下,
1 2 3 4 5 6 7
| <?php
require_once __DIR__.'/../vendor/autoload.php';
(new Laravel\Lumen\Bootstrap\LoadEnvironmentVariables( dirname(__DIR__) ))->bootstrap();
|
改成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?php
require_once __DIR__.'/../vendor/autoload.php';
$appEnvFile = null; if ($appEnv = env('APP_ENV')) { $file = ".env.$appEnv"; if (file_exists(dirname(__DIR__) . '/' . $file)) { $appEnvFile = $file; } }
(new Laravel\Lumen\Bootstrap\LoadEnvironmentVariables( dirname(__DIR__), $envFileName ))->bootstrap();
|
配置 NGINX
PHP 部分的配置如下
1 2 3 4 5
| location ~ \.php { ... fastcgi_param APP_ENV production; ... }
|
总结
实现的原理就是,通过 NGINX 设置 APP_ENV 的值,然后 Lumen 代码再根据 APP_ENV 的值,加载对应的 env 文件;如果找不到默认加载的是.env