我有两个数据库配置,一个用于生产,一个用于开发:
// 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关心我的生产配置中的环境变量是否存在,而我甚至不想使用生产配置?我该如何解决这个问题?
2条答案
按热度按时间hgc7kmma1#
当
.env
文件中存在以下内容时,可能会发生此问题相反,你应该
不同之处在于键的名称。除此之外,如果问题与bash和AWS有关,则为this might be of interest。
ct3nt3jp2#
我的建议是使用环境变量,并确保环境之间的键匹配(我认为这是最大的问题)。
然后您可以删除这两个配置文件,只修改
app/config/database.php
:我现在假设你在vhost或其他apache配置文件中设置生产服务器上的环境变量,把那些你为生产环境挑选的“特殊”键修改为你在开发环境中使用的键: