关于php:如何在Laravel 4上设置不同的环境?

How to set up different environments on Laravel 4?

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

对于本地计算机,我为" local.elders.dev"设置了一个虚拟主机。

不幸的是,由于某种原因,以下代码无法正常工作。

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

也许我需要执行一个工匠命令或其他操作。 我觉得我已经接近了,但还没到那儿!

谢谢大家 !


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

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

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


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

如果要在同一台计算机上以相同的名称运行多个环境(例如,登台和生产以及本地环境)怎么办?

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

设置本地环境变量

在vhost或.htaccess中添加用于本地安装(用于登台),例如,添加:

1
SetEnv LARAVEL_ENV staging

并与您的生产.htaccess或vhost中的相同:

1
SetEnv LARAVEL_ENV production

然后在start.php中使用通常的detectEnvironment()函数。

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

我们没有忘记本地...这是很酷的部分-如果在vhost或.htaccess中都没有找到环境变量,那么您的安装将默认为本地,就像在其他安装中一样。


我知道这已经解决了,但对于其他正在寻找解决方案的人来说...

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

1
2
3
4
5
6
7
8
9
10
11
12
$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"等),它就可以在任何项目上使用。"舞台"也一样。生产是默认的,因此任何没有"本地"或"阶段"的东西都可以用于生产。


好 !我刚刚解决了这个问题...代码实际上可以正常运行!问题是我正在使用

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

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

我通过简单地解决:

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

感谢@jeroen和@theshiftexchange :)


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

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

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

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

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

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

问候!


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