当我跑的$ php artisan env
时候我得到
Current application environment: production
如何将其改为开发或类似的东西?所以我可以看到错误..我已经阅读了很多文档,但新手的理解并不容易。我没有服务器配置体验,真的。
我相信有这样做的“聪明”的方式,但是我现在感兴趣的是手动改变环境。我该如何做?
欢迎各位兄弟 发布技术文章
这里的技术是共享的
我的方法是(laravel 5.2):
1种方法)在bootstrap/app.php 的 约17行的下面
加上 require __DIR__.'/environment.php';
的内容为
<?php use Dotenv\Dotenv; $env = $app->detectEnvironment(function () { $environmentPath = __DIR__ . '/../.env'; //$setEnv = trim(file_get_contents($environmentPath)); $setEnv = getenv('APP_ENV'); // APP_ENV 的配置见 /node-admin/9354 , 就可以得到 APP_ENV 的值 if(file_exists($environmentPath)) { //var_dump(getenv('APP_ENV'));exit; //$arr = array('') putenv("APP_ENV=$setEnv"); //如果 getenv('APP_ENV') 有值,执行下面引入 .local.env 配置文件. 否则的话 laravel 默认引入 .env文件 if(getenv('APP_ENV') && file_exists(__DIR__ . '/../.' . getenv('APP_ENV') . '.env')) { $dotenv = new Dotenv(__DIR__ . '/../', '.' . getenv('APP_ENV') . '.env'); $dotenv->load(); } } }); 然后 .env 配置服务器,.local.env配置本地 2种方法)在bootstrap/app.php 的 约17行的下面 加上 require __DIR__.'/environment.php'; 的内容为
<?php use Dotenv\Dotenv; $env = $app->detectEnvironment(function () { //$environmentPath = __DIR__ . '/../.env'; //$setEnv = trim(file_get_contents($environmentPath)); $hostname = gethostname();//得到主机名 可以查看本机主机名 //var_dump($hostname);exit;
//如果主机名在 数组 PC-201512010946 之中,执行下面引入 .local.env 配置文件.否则的话 laravel 默认引入 .env文件
if(in_array($hostname,array('PC-201512010946'))) {
//var_dump(getenv('APP_ENV'));exit; //$arr = array('') $setEnv='local'; putenv("APP_ENV=$setEnv"); if(getenv('APP_ENV') && file_exists(__DIR__ . '/../.' . getenv('APP_ENV') . '.env')) { $dotenv = new Dotenv(__DIR__ . '/../', '.' . getenv('APP_ENV') . '.env'); $dotenv->load(); } } });
然后 .env 配置服务器,.local.env配置本地
Laravel如何在不同的环境调用不同的配置文件?社区这个问题问的蛮多,如何优雅的方法实现呢,应该有好多方法吧,我一般习惯用两种方法,设置环境变量,或者将环境值写入到.env文件中去,不知道算不算优雅,有更优雅的方式欢迎告知。
1.设置环境变量,比如现在有本地开发和线上两个环境
本地配置php-fpm(比如用php-fpm而不是apache),比如环境变量为DEV_ENV,修改php-fpm.conf
env[DEV_ENV]=local
然后设置本地系统的环境变量
echo "export DEV_ENV=local" >> /etc/profile
source /etc/profile
让Laravel引入相应的配置文件,添加下面代码到bootstrap/app.php 中
$environment = getenv('DEV_ENV') ? '.' . getenv('DEV_ENV') : '';
$app->loadEnvironmentFrom('.env'.$environment);
在laravel的项目中建立.env.local,其中的配置为本地开发环境的配置,.env 为线上环境,当然你也可以建立其他的的配置文件比如 .env.develop,.env.preview 等,根据实际情况添加配置文件和环境变量,在不同的环境下面会根据环境变量来调用不同的配置。这种方式的好处就是项目上线以后就不需要做设置,线上没有配置过DEV_ENV这个环境变量,所以上线项目会自动调用.env 中的配置
2.在.env中写入当前环境的名称,,比如现在有本地开发和线上两个环境
清空.env文件,只第一行写入当前运行的环境,比如 local
然后新建 .local.env 和 .production.env 分别写入本地和线上的配置项
将以下代码加入bootstrap/app.php 中
$env = $app->detectEnvironment(function () {
$environmentPath = __DIR__ . '/../.env';
$setEnv = trim(file_get_contents($environmentPath));
if(file_exists($environmentPath)) {
putenv("APP_ENV=$setEnv");
if(getenv('APP_ENV') && file_exists(__DIR__ . '/../.' . getenv('APP_ENV') . '.env')) {
Dotenv::load(__DIR__ . '/../', '.' . getenv('APP_ENV') . '.env');
}
}
});
这样就可以根据.env 文件写入的值来调用对应的配置文件了
如果有更优雅的方式欢迎指教。
来自 http://www.tuicool.com/articles/q26zmeA
I wrote this article as my reference material as a practitioner of the computer that requires a lot of judgment and experience of the various parties so that in the future I hope to get a lot of feedback from various parties considering the number I needed to learn.
Ok ... brother lets gooo ..... !!!!,
Environment variables in implementation has usefull :
1. To create multisite.
2. distinguish between testing environment, production
3. The area division of labor between developers Frond-end, back-end developer and other teams.
........ Etc.
I have read many articles on the internet including mattstauffer.co in the version laravel documentation itself is still unclear as well. so still confused how to implementation.
Exactly how laravel Environment setting step:
on {root} \ bootstrap \ app.php you must mela implement detectEnvironment as a setter method environment
// Put before the "return $ app;"
$ App-> detectEnvironment (function ()
{
if ($ _ SERVER ['HTTP_HOST'] == 'laravel5e.com')
{
// Load environment required
app () -> loadEnvironmentFrom ('. Production.env');
}
else {
// Load the default environment
//Dotenv :: load (DIR__ __. ‘/ .. /’);
app () -> loadEnvironmentFrom ();
}
return getenv ('APP_ENV');
}
);
in its implementation:
1. The method detectEnvironment only a hierartical implmentasi pattern (logic for webEnvironment or consoleEnvironment)
2. needed setter method of loadEnvironmentFrom Illuminate \ Foundation \ Application, which to instance class Dotenv
Note: to implement the above example you should create a file '' .production.env '
BASE_DIR = / var / webroot / project-root
Cache_dir = $ BASE_DIR / cache
LOG_DIR = $ BASE_DIR / logs
TMP_DIR = "$ {BASE_DIR} / tmp"
APP_ENV = production
APP_DEBUG = true
APP_KEY = SomeRandomString
DB_HOST = localhostXX
DB_DATABASE = homestead
DB_USERNAME = homestead
DB_PASSWORD = secret
CACHE_DRIVER = file
SESSION_DRIVER = file
3. then you can take over the function of setting $ _ENV env
//route.php file
echo env ('DB_HOST', 'localhost');
tarraaaaa ........ should produce:
localhostXX
来自 https://medium.com/@achmadi/implements-laravel-5-0-environment-detection-environment-variables-e4486...
11 2 | |
添加评论 |
16 | Laravel 5从
这用于识别当前的环境。如果要显示错误,则需要在同一文件中启用调试模式:
该 | |||
6 | Laravel 5使用
对于您的生产服务器,您可能具有以下配置:
| ||
3 | 你也可以看看是暴露的方法 我需要一个应用程序来运行多个子域。所以在
| ||
-5 | 在Laravel,默认环境总是生产。 您需要做的是
| ||
.env
文件?是对的吗? - mikelovelyuk 二月25 '15在14:05.env
文件,但运行应用程序的每台计算机上的内容可能不同。例如,在您的本地机器上,您将拥有APP_ENV=development
和APP_DEBUG=true
,但在您的生产服务器上的值将是APP_ENV=production
和APP_DEBUG=false
。 - 博格丹 2月25日15日14时35分.env
文件。 - 博格丹 2月25日15时14分46分vendor
文件夹与应用程序的其余部分一起部署,或者composer install
在生产服务器上运行? - 博格丹 9月16日,星期二22:18