Laravel .env 多环境配置文件的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel .env 多环境配置文件的使用相关的知识,希望对你有一定的参考价值。

项目开发中,通常会有本地开发环境、内网测试环境、线上真实环境。这三种环境的配置通常都不尽相同,Laravel 可以通过环境变量  APP_ENV 的值来加载不同的 .env 配置文件。下面会介绍两种方法,分别是通过 nginxphp-FPM 来设置 APP_ENV 环境变量的值。

方法一:修改 Nginx 配置文件设置 APP_ENV:

location = /index.php {
  index index.php;
  try_files $uri =404;
  fastcgi_pass unix__tmp_php_cgi_sock;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param SCRIPT_NAME $fastcgi_script_name;
  fastcgi_param APP_ENV xxxx;
}

方法二:修改 PHP-FPM 配置文件设置 APP_ENV:

env[APP_ENV] = xxxx

上述两种方法只需二选一。重启 Nginx 和 PHP-FPM 服务,Laravel 框架就会自动选择加载项目根目录下的 .env.xxxx 配置文件,而不会去加载 .env 配置文件了。

通过 APP_ENV 环境变量值加载特定 .env 配置文件的 Laravel 源代码位于文件Illuminate/Foundation/Bootstrap/DetectEnvironment.php 中,摘录关键代码如下:

 1 /**
 2  * Detect if a custom environment file matching the APP_ENV exists.
 3  *
 4  * @param  \Illuminate\Contracts\Foundation\Application  $app
 5  * @return void
 6  */
 7 protected function checkForSpecificEnvironmentFile($app)
 8 {
 9     if (! env(‘APP_ENV‘)) {
10         return;
11     }
12 
13     $file = $app->environmentFile().‘.‘.env(‘APP_ENV‘);
14 
15     if (file_exists($app->environmentPath().‘/‘.$file)) {
16         $app->loadEnvironmentFrom($file);
17     }
18 }

请注意:

当设置了 APP_ENV 环境变量时,当运行 Laravel 的 Aritsan 终端命令之前,比如迁移命令(./artisan migrate)、启动队列侦听器(./artisan queue:listen)等等,均需要在终端也导入 APP_ENV 环境变量。

$ export APP_ENV=xxxx

$ ./artisan migrate

或者

$ APP_ENV=xxxx ./artisan migrate

当然,也可以选择在 ~/.bash_profile 或者 ~/.bashrc 中一劳永逸地设定好终端环境变量 APP_ENV 的值。

以上是关于Laravel .env 多环境配置文件的使用的主要内容,如果未能解决你的问题,请参考以下文章

如何为 dotenv 获取特定于环境的 .env 文件(在 Laravel 5 中)

laravel5环境配置

vue多环境配置之 .env配置文件

没有 .env 文件的命令行生产中的 Laravel 和环境变量

laravel could not parse uri

laravel 的.env 配置文件