4

我正在尝试在 Laravel 4 应用程序上设置多个环境,并且根据我们所处的环境自然会设置不同的数据库。

对于我的本地机器,我为“local.elders.dev”设置了一个虚拟主机

不幸的是,由于某种原因,以下代码不起作用。

$env = $app->detectEnvironment(array(
    'local' => array('http://local.elders.dev'),
));

也许我需要运行一个工匠命令或其他东西。我觉得我很接近了,但还没有到那里!

谢谢大家 !

4

6 回答 6

4

另一种方法是使用项目所在文件夹的名称。这适用于控制台和 Web。如果不同的环境托管在同一台服务器上,我发现这是唯一可靠的方法。

$env = $app->detectEnvironment(array(
  'staging'     => strpos(getcwd(), '/staging')>-1, 
  'acceptance'  => strpos(getcwd(), '/acceptance')>-1, 
  'production'  => strpos(getcwd(), '/production')>-1, 
));

一个很大的优势是,您可以通过简单地重命名或复制项目文件夹而不更改文件、数据库记录或环境变量来将登台移动到生产环境。

于 2014-07-14T18:05:05.417 回答
3

我知道这已得到解答,但对于其他正在寻找解决方案的人...

我的环境检测设置如下所示:

$env = $app->detectEnvironment(array(

// Development
// any machine name with the term "local" will use the local environment
'local' => array('*local*'),

// Stage
// any machine name with the term "stage" will use the stage environment
'stage' => array('*stage*')

// Production
// production is default, so we don't need to specify any detection

));

这很方便,因为只要我使用“本地”进行开发(如“localhost”、“localhost:8000”、“my.app.local”等),它就可以在任何项目上工作。“舞台”也是如此。并且生产是默认的,所以没有“本地”或“阶段”的任何东西都适用于生产。

于 2013-08-29T18:56:57.437 回答
3

使用 Laravel 4x 在同一台机器上处理多个环境

如果您想在同一台机器上运行多个具有相同名称的环境——例如,一个登台生产本地环境,该怎么办?

在 Laravel 4x 中处理环境有一个更好的解决方案,可以通过向您的 vhosts 文件或 .htaccess 添加一个衬里来完成:

设置本地环境变量

在 vhost 或 .htaccess 中为您的本地安装添加,对于staging,例如添加:

SetEnv LARAVEL_ENV staging

在您的生产.htaccess 或 vhost 中也是如此:

SetEnv LARAVEL_ENV production

然后是 start.php 中通常的 detectEnvironment() 函数。

$env = $app->detectEnvironment(function()
{
// Default to local if LARAVEL_ENV is not set
return getenv('LARAVEL_ENV') ?: 'local';
});

我们没有忘记本地...这是很酷的部分——如果在 vhost 或 .htaccess 中都找不到环境变量,您的安装将默认为本地,因为它们会在其他安装中找到。

于 2014-12-16T03:12:02.433 回答
1

好的 !我刚刚解决了这个问题......代码实际上工作正常!问题是我正在使用

$_SERVER['DB1_HOST'] //for Pagodabox.

当然,这不是在我的本地环境中设置的,这几乎破坏了应用程序......

我通过简单地修复:

isset($_SERVER['DB1_HOST']) ? $_SERVER['DB1_HOST'] : '';

感谢@jeroen 和@theshiftexchange :)

于 2013-01-26T10:31:22.833 回答
0

尝试用 替换它'local.elders.dev',我不是 100% 确定,但它可能匹配主机名,而不是完整路径。

于 2013-01-25T21:26:16.453 回答
0

Laravel 4 通过“bootstrap/start.php”文件中指定的机器名来检测环境。

例如,在我的情况下,配置变为:

$env = $app->detectEnvironment(array(
  'local' => array('Victor.local', 'Victor-PC'),
));

这意味着 Laravel 将为两台机器使用“本地”环境设置:“Victor.local”(Mac)和“Victor-PC”(Windows)。

为了知道当前机器名,可以使用下面的 PHP 代码:

<?php echo gethostname(); ?>

对于每个环境,您可以在 app/config 中创建一个文件夹并替换所需的配置文件和属性。

问候!

于 2014-12-16T00:41:52.110 回答