laravel5下多环境.env配置

本文涉及的产品
.cn 域名,1个 12个月
简介:

laravel5已经设计了环境管理功能:

使用HTTP时只需要在apache或nginx中添加APP_ENV=环境名  即可(当然比较麻烦,每个服务器环境都需要配置),如果使用artisan 命令行方式只需要在命令中追加参数 --env=环境名 即可。但并未做到不同环境取不同配置的功能,需要额外增加代码即可。


在HTTP方式中,如果对每个服务器添加 环境变量 虽然可行,可给域名留下随意配置的借口,给后续通过域名就能区分环境留下不便,在这里推荐一个办法,使用域名的后缀来定义环境,极大的方便域名区分环境,同时也不需要在服务器中配置 环境变量,给搭建环境提供方便。


使用域名进行区分环境的好处是不同的域名可以直观看出这是哪个环境。

以域名 www.laravel.com 为例:


各环境域名要求如下:

本地环境: www.laravel.loc

开发合成环境:www.laravel.dev

测试环境: www.laravel.test

预发环境:www.laravel.pre

正式生产环境:www.laravel.com


其中开发环境,测试环境匀可以在公共路由配置hosts,方便大家使用。


增加代码: 

在 bootstrap/目录下增加文件 env.php 并增加代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
//域名配置
$env_hosts  = [
     'local'  => [ 'www.laravel.loc' ],
     'develop'  => [ 'www.laravel.dev' ],
     'test'  => [ 'www.laravel.test' ],
     'production'  => [ 'www.laravel.com' ],
];
 
//环境处理
if  (! $app ->runningInConsole()) { //HTTP形式
     if  ( empty ( $_SERVER [ 'HTTP_HOST' ])) {
         die ( '[error] no host' );
     }
     foreach  ( $env_hosts  as  $env  =>  $hosts ) {
         if  (in_array( $_SERVER [ 'HTTP_HOST' ],  $hosts )) {
             $app_env  $env ;
             break ;
         }
     }
else  { //其它形式
     $app_env  $app ->detectEnvironment( function  () {
         return  'production' ;
     });
}
if  ( empty ( $app_env ) ||  empty ( $env_hosts [ $app_env ])) {
     die ( '[error] no environment' );
}
//写入环境配置
Dotenv::setEnvironmentVariable( 'APP_ENV' $app_env );
Dotenv::setEnvironmentVariable( 'APP_HOST' $env_hosts [ $app_env ][0]);
$app ->loadEnvironmentFrom(env( 'APP_ENV' ) .  '.env' )
         ->useEnvironmentPath(base_path( 'env' ));

在bootstrap/app.php文件中增加一行:(注意位置,一定要在Illuminate\Foundation\Application实例化之后)

1
require_once  __DIR__. '/env.php' ;


如下:

wKioL1i1AgWRtwH0AAHf2ajh4CA603.jpg



在框架的根目录创建 env 目录并添加如下几个文件:内容可以直接复制 .env 文件

local.env

develop.env

testing.env

pretest.env

production.env


现在可以在任意controller中测试环境变量是否OK:

在不同的环境文件中修改配置: APP_KEY  的值。

1
var_dump(app()[ 'env' ],env( 'APP_KEY' )); die ;



注意:使用这种方式配置环境需要额外增加几个环境配置文件,当有一个在变动时,其它的几个就有可能需要跟着变动,如果几个环境中完全不会变的配置,就无需添加到环境配置中,使用这种方式配置的环境。


在调用 artisan 命令时如果命令中执行代码有涉及到环境,那么都需要添加上环境参数,如:

1
php artisan queue:listen -- env =production

否则命令行会引用错误环境配置,导致程序异常。


注意:laravel5各个小版本包括 lumen 会有些差异主要是 Dotenv::setEnvironmentVariable 方式有两种版本:

静态方式调用版:(laravel 5.0 , laravel 5.1)

1
Dotenv::setEnvironmentVariable( 'APP_ENV' $app_env );

实例化方式调用版:(laravel 5.2 , lumen)

1
2
$load  = new  Dotenv\Loader( '' );
$load ->setEnvironmentVariable( 'APP_ENV' $app_env );


使用时注意当前版本。


本文转自  ttlxihuan    51CTO博客,原文链接:http://blog.51cto.com/php2012web/1790948
相关文章
|
Java Linux Maven
SpringBoot多环境的yml或properties配置,生产环境和开发环境分离(超详细)
SpringBoot多环境的yml或properties配置,生产环境和开发环境分离(超详细)
296 0
|
存储 应用服务中间件 nginx
nuxt3:我们开始吧-开发-配置-部署(三)
nuxt3:我们开始吧-开发-配置-部署(三)
1150 0
UMI多环境配置
一般来说项目不止有dev和prod两个环境,umi可以通过环境变量 UMI_ENV 区分不同环境来指定配置。
1386 0
|
2月前
|
JavaScript 测试技术 Windows
vue配置webpack生产环境.env.production、测试环境.env.development(配置不同环境的打包访问地址)
本文介绍了如何使用vue-cli和webpack为Vue项目配置不同的生产和测试环境,包括修改`package.json`脚本、使用`cross-env`处理环境变量、创建不同环境的`.env`文件,并在`webpack.prod.conf.js`中使用`DefinePlugin`来应用这些环境变量。
84 2
vue配置webpack生产环境.env.production、测试环境.env.development(配置不同环境的打包访问地址)
|
2月前
|
JavaScript 测试技术
vue配置生产环境.env.production、测试环境.env.development
该文章介绍了如何在Vue项目中配置和使用不同的环境变量文件(.env、.env.production、.env.development)以适应开发、测试和生产环境,并通过修改`package.json`中的scripts来实现不同环境的打包。
366 0
vue配置生产环境.env.production、测试环境.env.development
|
3月前
|
测试技术
Profile Config 多环境不同配置
Profile Config 多环境不同配置
31 0
|
6月前
|
缓存 应用服务中间件 持续交付
自动化部署 - Laravel Deploy实战
自动化部署 - Laravel Deploy实战
74 0
|
11月前
|
JavaScript 小程序
VUE3(三十五)vite构建的项目配置使用.env文件
VUE3(三十五)vite构建的项目配置使用.env文件如标题所示:我要在vue3项目使用.env文件。 先介绍一下项目背景,项目使用VUE3.2 + vite2.9 + typescript搭建。 我基本断定,vue3使用.env文件的方法可能和vue2使用.env文件的方法可能是不同,关于vue2项目如何使用.env文件,请移步《VUE2(七)VUE配置env文件使用》
379 1
Viper中的yaml配置文件入门,Viper开发环境和生产环境的隔离
Viper中的yaml配置文件入门,Viper开发环境和生产环境的隔离
|
6月前
|
JavaScript 测试技术
Vue配置生产环境和测试环境的参数,.env.production、.env.development怎么用?
Vue配置生产环境和测试环境的参数,.env.production、.env.development怎么用?
下一篇
无影云桌面