如何在Laravel 4上设置不同的环境?

时间:2013-01-25 21:19:27

标签: php laravel laravel-4

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

对于我的本地计算机,我为“local.elders.dev”

设置了一个虚拟主机

不幸的是,由于某些原因,以下代码无效。

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

也许我需要运行工匠命令或其他东西。我觉得我很亲密,但还没到那儿!

感谢所有人!

6 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分: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

));

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

答案 2 :(得分:3)

使用Laravel 4x

处理同一台计算机上的多个环境

如果您想在具有相同名称的同一台计算机上运行多个环境,例如暂存生产以及本地,该怎么办?环境?

在Laravel 4x中有一个更好的处理环境的解决方案,可以通过向你的vhosts文件添加一个内核 - 或.htaccess来实现:

设置本地环境变量

在vhost或.htaccess中为本地安装添加登台,例如添加:

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中找不到环境变量,您的安装将默认为本地,因为它们可以在其他装置中找到。

答案 3 :(得分:1)

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

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

当然这不是我当地的环境,这几乎打破了应用......

我只是简单地做了:

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

感谢@jeroen和@theshiftexchange:)

答案 4 :(得分:0)

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

答案 5 :(得分: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中创建一个文件夹,并替换所需的配置文件和属性。

问候!