dotenv и Elastic Beanstalk - файл среды.env не найден или не читается
Я пытаюсь загрузить проект Lumen в Amazon Elastic Beanstalk.
.env находится в.gitignore.
Это нормально, потому что у меня есть несколько окружений ( dev, qa, prod), поэтому мне нужно настроить отдельную переменную env для каждого окружения
Я получаю это сообщение об ошибке:
Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Dotenv: Environment file .env not found or not readable. Create file with your environment settings at /var/app/current/bootstrap/../.env' in /var/app/current/vendor/vlucas/phpdotenv/src/Dotenv.php:33 Stack trace: #0 /var/app/current/bootstrap/app.php(4): Dotenv::load('/var/app/curren...') #1 /var/app/current/public/index.php(13): require('/var/app/curren...') #2 {main} thrown in /var/app/current/vendor/vlucas/phpdotenv/src/Dotenv.php on line 33
Я понимаю, что система не находит.env
Дело в том, что я установил переменные в консоли Amazon:
Software Configuration
Environment variables: APP_ENV, DB_USERNAME, DB_PASSWORD, DB_DATABASE, DB_HOST, APP_KEY
eb printenv:
Environment Variables:
DB_DATABASE = ebdb
DB_PASSWORD = xxxxxxxx
APP_KEY = xAY4hnrXlht5fdvB9PzPAwDqc1R
DB_HOST = xxxxxxcnzd3rux8ue7.us-east-1.rds.amazonaws.com:3306
APP_ENV = dev
DB_USERNAME = myuser
У меня также есть в.ebextensions/environment.config:
container_commands:
# Copy EB env configuration file over
01_config_environment:
command: mv /var/app/ondeck/.env.elasticbeanstalk /var/app/ondeck/.env
02-install-packages:
command: "composer.phar install -d /var/app/ondeck/www"
option_settings:
option_name: DB_HOST
value: xxxxxxx.cnzd3rux8ue7.us-east-1.rds.amazonaws.com
- option_name: DB_PORT
value: 3306
- option_name: DB_NAME
value: ebdb
- option_name: DB_USER
value: myuser
- option_name: DB_PASS
value: xxxxxx
Но не могу избавиться от этой ошибки!
1 ответ
Люмен 5.0, 5.1
Если вы используете Lumen < 5.2, вы можете обновить свой файл, который загружает файл .env. Просто ловите исключение и игнорируйте его.
try {
Dotenv::load(__DIR__.'/../');
} catch (InvalidArgumentException $e) {
//
}
Lumen 5.2 - 5.7 не имеют этой проблемы, так как они в основном уже делают вышеперечисленное.
Люмен 5.8+
Lumen 5.8 повторно представил проблему, а также немного усложнил ее обход. Для этого вам нужно создать класс, расширяющий
\Laravel\Lumen\Bootstrap\LoadEnvironmentVariables
, и переопределить
bootstrap()
метод. Например, создать новый файл
app/Bootstrap/MyLoadEnvironmentVariables.php
:
<?php
namespace App\Bootstrap;
use Dotenv\Exception\InvalidFileException;
use Laravel\Lumen\Bootstrap\LoadEnvironmentVariables;
class MyLoadEnvironmentVariables extends LoadEnvironmentVariables
{
public function bootstrap()
{
try {
$this->createDotenv()->safeLoad();
} catch (InvalidFileException $e) {
//
}
}
}
Теперь вам нужно обновить
bootstrap/app.php
файл для использования вашего нового класса вместо базового класса:
(new App\Bootstrap\MyLoadEnvironmentVariables(
dirname(__DIR__)
))->bootstrap();