У меня есть две конфигурации базы данных, одна для производства и одна для разработки:
// 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 заботится о том, что переменная окружения в моей производственной конфигурации не существует, когда я даже не хочу использовать производственную конфигурацию? Как мне обойти это?
Мое предложение должно заключаться в том, чтобы вместо этого использовать переменные среды и убедиться, что ключи соответствуют средам (я думаю, это ваша самая большая проблема).
// 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}
Других решений пока нет …