2015-06-17 8 views
9

Я принимаю проект PHP на серверах AWS EC2 с использованием эластичного бобового стебля. Я настроил свой ENV Vars используя php dotenv, которые, кажется, становится все мои ВАР просто отлично от моего корня .env файла:AWS ElasticBeanstalk ENV Vars не работает

DbConnect.php:

require '../vendor/autoload.php'; 
$dotenv = new Dotenv($_SERVER['DOCUMENT_ROOT']); 
$dotenv->load(); 

$DB_HOST = getenv('DB_HOST'); 
$DB_USERNAME = getenv('DB_USERNAME'); 
$DB_PASSWORD = getenv('DB_PASSWORD'); 
$DB_DATABASE = getenv('DB_DATABASE'); 

$mysqli = new mysqli($DB_HOST, $DB_USERNAME, $DB_PASSWORD, $DB_DATABASE); 

Таким образом, в консоли управления AWS, Я настроил те же самые имена ENV vars в конфигурации программного обеспечения, git push и re eb-deployed. Я получаю 500 ошибок, потому что EC2 ENV vars, похоже, не собираются.

enter image description here

Есть ли что-то еще мне нужно сделать?


Update:

eb printenv отображаются правильные значения VAR ENV.

+2

Не знаю, кто вниз голосовать без каких-либо комментариев. Вопрос выглядит нормально для меня с деталями. Если вы проиграли, вы должны указать некоторые причины. – BMW

+1

Вы всегда можете использовать 'eb printenv', чтобы убедиться, что env vars - это то, что вы ожидаете от них. –

+1

Вы пытались использовать синтаксис '$ _SERVER ['DB_HOST']' для всех envvars вместо getenv? –

ответ

5

Цитата https://github.com/vlucas/phpdotenv

phpdotenv is made for development environments, and generally should not be used in production. In production, the actual environment variables should be set so that there is no overhead of loading the .env file on each request. This can be achieved via an automated deployment process with tools like Vagrant, chef, or Puppet, or can be set manually with cloud hosts like Pagodabox and Heroku.

Вы будете иметь PHP фатальную ошибку, если вы не имеете .env файл

Fatal error: Uncaught exception 'Dotenv\Exception\InvalidPathException' with message 'Unable to read the environment file at /home/vagrant/Code/project/.env.' in /home/vagrant/Code/project/vendor/vlucas/phpdotenv/src/Loader.php on line 75

Если вы хотите Ниже приведен пример кода, который вы можете установить Environment Variable для проверки, он загружает только Dotenv класс, если он находится в местной/испытательной среде

if(getenv('APP_ENV') === 'local' || getenv('APP_ENV') === 'testing') 
{ 
    $dotenv = new Dotenv\Dotenv(__DIR__); 
    $dotenv->load(); 
} 

Или другой способ проверить файл .env существует или не

$filePath = rtrim(__DIR__, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR . '.env'; 
if(is_file($filePath) && is_readable($filePath)) 
{ 
    $dotenv = new Dotenv\Dotenv(__DIR__); 
    $dotenv->load(); 
} 
Смежные вопросы