对于我的本地机器,我为“local.elders.dev”设置了虚拟主机。
不幸的是,由于某种原因,以下代码无法正常工作。
$env = $app->detectEnvironment(array(
'local' => array('http://local.elders.dev'),
));
也许我需要运行一个artisan命令或其他东西。我感觉我已经接近成功了,但还差一点!谢谢大家!
$env = $app->detectEnvironment(array(
'local' => array('http://local.elders.dev'),
));
另一种方法是使用项目所在文件夹的名称。这在控制台和 web 端都可以使用。如果不同的环境托管在同一服务器上,我发现这是唯一可靠的方法。
$env = $app->detectEnvironment(array(
'staging' => strpos(getcwd(), '/staging')>-1,
'acceptance' => strpos(getcwd(), '/acceptance')>-1,
'production' => strpos(getcwd(), '/production')>-1,
));
一个巨大的优点是,你可以通过简单地重命名或复制项目文件夹而不改变文件、数据库记录或环境变量来将暂存环境移动到生产环境。
$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”等),“stage”也是一样。而生产环境则是默认的,所以任何没有“local”或“stage”的内容都适用于生产环境。
假设你想在同一台机器上运行相同名称的多个环境,例如一个 staging,一个 production 和一个 local 环境,那该怎么办呢?
Laravel 4x 有更好的解决方案来处理多个环境,只需要在你的 vhosts 文件或 .htaccess 中添加一行代码即可:
在你的本地安装的 vhost 或 .htaccess 文件中,例如要添加 staging 环境,可以添加以下内容:
SetEnv LARAVEL_ENV staging
在您的生产 .htaccess 或虚拟主机中同样如此:
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';
});
export
或手动调用时使用类似 LARAVEL_ENV=staging php /path/to/command.php
的方式。 - David Weinraub好的!我刚刚解决了问题……实际上代码是正常工作的!问题在于我使用了
$_SERVER['DB1_HOST'] //for Pagodabox.
isset($_SERVER['DB1_HOST']) ? $_SERVER['DB1_HOST'] : '';
Laravel 4 通过在 "bootstrap/start.php" 文件中指定的机器名称来检测环境。
例如,在我的情况下,配置如下:
$env = $app->detectEnvironment(array(
'local' => array('Victor.local', 'Victor-PC'),
));
这意味着Laravel将为两台机器使用“local”环境设置:“Victor.local”(Mac)和“Victor-PC”(Windows)。
为了知道当前机器名称,您可以使用以下PHP代码:
<?php echo gethostname(); ?>
对于每个环境,您可以在app/config中创建一个文件夹,并替换所需的配置文件和属性。
祝好!
'local.elders.dev'
,我不确定百分之百,但它可能匹配主机名,而不是完整路径。'*.dev'
怎么样?如果连它也匹配不上,那么就是你设置数据库配置文件的方式有问题。 - Jeroen