【发布时间】:2014-03-02 11:29:00
【问题描述】:
我已将我的 laravel 应用程序部署到弹性 beanstalk 环境中。该应用程序使用 bootstrap/start.php 中的这段代码检测其环境
$env = $app->detectEnvironment(function () {
return getenv('APP_ENV') ?: 'local';
});
当弹性 beanstalk 启动时,它会运行我设置的配置文件,以检测是否设置了参数。在这种情况下,我将此参数设置为开发,然后配置文件基于此设置环境变量
APP_ENV = development
DB_HOST = rds dev endpoint
DB_NAME = rds dev db name
DB_USERNAME = dev username
DB_PASSWORD = devdb pass
当我在浏览器中访问应用程序时,它按预期工作,并且正确连接到开发数据库。
当我 ssh 进入服务器并尝试运行时
php artisan migrate
我得到一个 pdo 异常,没有这样的文件或目录
当我跑步时
php artisan env
即使定义了环境变量 APP_ENV,也会返回本地。我非常确定这个变量是被定义的,因为当浏览器中的 laravel 错误时,我可以在服务器/请求数据中看到具有值开发的变量以及在环境启动时创建的其他环境变量
我错过了什么?
根据 antonios answer 进行了编辑以包含个性化解决方案
.环境
<?php
if (getenv('PARAM1') === false) {
return false;
} else {
switch (getenv('PARAM1')) {
case 'development':
return array(
'APP_ENV' => 'development',
'DB_HOST' => '***',
'DB_NAME' => '***',
'DB_USERNAME' => '***',
'DB_PASSWORD' => '***',
);
break;
case 'staging':
return array(
'APP_ENV' => 'staging',
'DB_HOST' => '***',
'DB_NAME' => '***',
'DB_USERNAME' => '***',
'DB_PASSWORD' => '***',
);
break;
case 'production':
return array(
'APP_ENV' => 'production',
'DB_HOST' => '***',
'DB_NAME' => '***',
'DB_USERNAME' => '***',
'DB_PASSWORD' => '***',
);
break;
}
}
start.php
$env = require __DIR__.'/../.environment';
if ($env !== false) {
foreach ($env as $key => $value) {
putenv(sprintf('%s=%s', $key, $value));
}
}
$env = $app->detectEnvironment(function () {
return getenv('APP_ENV') ?: 'local';
});
【问题讨论】:
-
好的,但是,你把所有的变量都放在你的 git 里????我和你的情况完全一样
标签: amazon-web-services laravel-4 amazon-elastic-beanstalk