我已經將我的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?我和你的情況完全一樣 –