我已经将我的laravel应用程序部署到弹性beanstalk环境中。这个程序检测周边环境与这段代码在引导/ start.phplaravel enviroment当命令行不同于浏览器时
$env = $app->detectEnvironment(function() {
return getenv('APP_ENV') ?: 'local';
});
当弹性魔豆开始运行,我已经设置了它的配置文件,如果参数设置为检测。在这种情况下,我有这个参数设置为开发和配置文件然后基于这个环境变量,即
APP_ENV = development
DB_HOST = rds dev endpoint
DB_NAME = rds dev db name
DB_USERNAME = dev username
DB_PASSWORD = devdb pass
当我访问在按预期工作浏览器的应用程序,它被正确连接到开发D b。
当我ssh到服务器,并尝试运行
php artisan migrate
我得到一个PDO异常
当我运行
php artisan env
甚至返回本地虽然没有这样的文件或目录定义了环境变量APP_ENV。我非常确定这个变量是被定义的,因为当浏览器中的laravel错误时,我可以看到具有服务器/请求数据中的值开发的变量以及在环境启动时创建的其他环境变量
我是什么失踪?
编辑,包括基于ANTONIOS回答个性化的解决方案
.environment
<?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?我和你的情况完全一样 –