Произошел сбой миграции Artisan в среде разработки из-за отсутствия переменной среды в производственной конфигурации

У меня есть две конфигурации базы данных, одна для производства и одна для разработки:

// app/config/database.php
'connections' => array(
'mysql' => array(
'driver'    => 'mysql',
'host'      => $_SERVER['RDS_HOSTNAME'],
'database'  => $_SERVER['RDS_DB_NAME'],
'username'  => $_SERVER['RDS_USERNAME'],
'password'  => $_SERVER['RDS_PASSWORD'],
'charset'   => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix'    => '',
)
)

// app/config/development/database.php
'connections' => array(
'mysql' => array(
'driver'    => 'mysql',
'host'      => $_SERVER['MYSQL_PORT_3306_TCP_ADDR'],
'database'  => $_SERVER['MYSQL_ENV_MYSQL_DATABASE'],
'username'  => $_SERVER['MYSQL_ENV_MYSQL_USER'],
'password'  => $_SERVER['MYSQL_ENV_MYSQL_PASSWORD'],
'charset'   => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix'    => '',
)
)

Существуют соответствующие переменные среды базы данных (те, которые начинаются с MYSQL_) и при запуске команды migrate:

php artisan migrate --env=development

выдается следующее исключение:

{
"error":{
"type":"ErrorException",
"message":"Undefined index: RDS_HOSTNAME",
"file":"/var/www/app/config/database.php",
"line":50
}
}

Почему Laravel заботится о том, что переменная окружения в моей производственной конфигурации не существует, когда я даже не хочу использовать производственную конфигурацию? Как мне обойти это?

0

Решение

Мое предложение должно заключаться в том, чтобы вместо этого использовать переменные среды и убедиться, что ключи соответствуют средам (я думаю, это ваша самая большая проблема).

// File: .env.development.php
return [
'database_mysql_host' => '',
'database_mysql_database' => '',
'database_mysql_username' => '',
'database_mysql_password' => '',
];

Затем вы можете удалить оба ваших конфигурационных файла и просто изменить app/config/database.php:

'connections' => array(
'mysql' => array(
'driver'    => 'mysql',
'host'      => $_ENV['database_mysql_host'],
'database'  => $_ENV['database_mysql_database'],
'username'  => $_ENV['database_mysql_username'],
'password'  => $_ENV['database_mysql_password'],
'charset'   => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix'    => '',
)
)

На данный момент я предполагаю, что вы устанавливаете переменные среды на рабочем сервере в vhost или в каком-либо другом файле конфигурации apache. Измените те ключи, для которых они установлены, на «специальные», которые вы выбрали для своей производственной среды, чтобы они соответствовали ключам, которые вы используете в своей среде разработки:

SetEnv database_mysql_host {your value for RDS_HOSTNAME}
SetEnv database_mysql_database {your value for RDS_DB_NAME}
SetEnv database_mysql_username {your value for RDS_USERNAME}
SetEnv database_mysql_password {your value for RDS_PASSWORD}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]