Laravel 4.1 removed the feature使用域来检测应用程序运行的环境。阅读他们现在建议使用主机名的文档。但是,对我来说,如果你在一个团队中工作,这似乎很麻烦。每个人都应该更改bootstrap/start.php
文件并添加自己的主机名才能在开发环境中运行应用程序吗?另外,如果您想在同一台机器上安装两个不同的环境,该怎么办?
如果您在Laravel 4.1 +团队中工作,如何最好地检测环境?
答案 0 :(得分:14)
以下是 bootstrap / start.php 文件的设置:
$env = $app->detectEnvironment(function() use($app) {
return getenv('ENV') ?: ($app->runningInConsole() ? 'local' : 'production');
});
在我的情况下,这个方法不是默认数组,而是使用三元返回闭包。这样我就可以更灵活地选择理想的环境。您也可以使用switch语句。 Laravel将读取返回值并自行配置。 使用 getenv 原生函数,我只是在听一个给定的环境。如果我的应用程序在服务器上,那么它将“选择”服务器配置。如果在本地,那么它将选择本地(或开发) 并且不要忘记在 app / config 中为您创建自定义目录 还有测试环境,每次你是单元测试应用程序时都会自动选择。
Laravel让环境变得非常有趣。
<强>更新强>
在环境方面,我们主要关注数据库凭据。
对于制作我使用 Fortrabbit ,因此在服务器上配置新应用时,fortrabbit正在为我生成这些值。我只需要声明它们。例如数据库或数据库的DB ...或DB_HOST或HOST ... 在本地,这些值是您用于localhost / mysql设置的值。
答案 1 :(得分:3)
<强>更新强>
在Laravel 5.0环境中,不再需要以相同的方式进行检测。在.env
文件中,您只需拥有应用应运行的环境的变量。
Laravel的旧答案&lt; = 4.2
我最终做的是非常接近旋转木马的建议。无论如何,我想我会分享它。以下是我们bootstrap/start.php
文件的相关部分:
$env = $app->detectEnvironment(function ()
{
if($app->runningInConsole())
return "development";
$validEnvironments = array("development", "staging", "production");
if (in_array(getenv('APP_ENV'), $validEnvironments)) {
return getenv('APP_ENV');
}
throw new Exception("Environment variable not set or is not valid. See developer manual for further information.");
});
这样所有团队成员都必须在某处声明一个环境变量。如果没有设置环境变量或者默认生产是最好的,我还没有真正决定是否抛出异常。但是,如上所述,它很容易改变。
答案 2 :(得分:1)
对我来说,我只是使用'dev' => '*.local'
而且它有效。我没有100%在团队情况下进行测试,但我认为它是有效的(大假设警告:)假设您使用的是OSX并获得默认的Alexs-iMac.local
- 就像主机名一样。
至于假冒环境,我不确定它是否真的受到支持。它是可行的,但总的来说环境的重点是开发人员对生产有完全不同的需求,两者是相互排斥的。能够打开一个物理环境似乎与这个目标背道而驰。
答案 3 :(得分:1)
Laravel 4.1和4.2通过&#34; bootstrap / start.php&#34;中指定的机器名检测环境。文件。
例如,在我的情况下,配置变为:
$env = $app->detectEnvironment(array(
'local' => array('Victor.local', 'Victor-PC'),
));
这意味着Laravel将使用&#39; local&#39;两台机器的环境设置:&#39; Victor.local&#39; (Mac)和&#39; Victor-PC&#39; (视窗)。
通过这种方式,您可以将多台计算机注册为本地环境。其他环境也可以注册。
要了解当前计算机名称,可以使用以下PHP代码:
<?php echo gethostname(); ?>
希望它有所帮助!
答案 4 :(得分:0)
您可以使用以下内容:
$env = $app->detectEnvironment(function(){
if($_SERVER['HTTP_HOST'] == 'youdomain_local')
{
return 'local';
}elseif($_SERVER['HTTP_HOST'] == 'youdomain_team')
{
return 'team';
}else{
return 'production';
}
});
答案 5 :(得分:0)
我做的是,制作目录app/config/local
并使用代码
$env = $app->detectEnvironment(function(){
return $_SERVER['HTTP_HOST']=="localhost"?"local":"production";
});
对于localhost和在线。
答案 6 :(得分:0)
我不喜欢那个默认的制作,所以除了现场服务器以外我做的任何事情都会转到本地配置:
在bootstrap / start.php中:
$env = $app->detectEnvironment(function(){
if (gethostname() !== 'live_server_hostname'){
return 'local';
} else {
return 'production';
}
});
答案 7 :(得分:0)
在bootstrap/start.php
中定义:
$env = $app->detectEnvironment(function() use($app) {
$enviromentsHosts = [
'localhost',
'local',
];
if ($app->runningInConsole() || in_array($app['request']->getHost(), $enviromentsHosts)) {
return 'local';
} else {
return 'production';
}
});
我认为最好只使用Laravel 4