我知道这个问题以前已经回答过,但没有一个答案适用于我的情况。基本上,我有一个Laravel安装。我试着跑
php artisan migrate
我收到以下错误:
Access denied for user 'homestead'@'localhost'
现在就是这笔交易。我不是在使用宅基地。这是标准的LAMP安装,我更改了config / database.php和.env文件中的数据库设置,以反映我的数据库的正确用户名和密码。我找不到工匠仍然试图使用宅基地用户的合理理由。我的APP_ENV设置为本地,app或config文件夹中没有生产文件夹。我不知道它在哪里拉动宅基地用户。
ETA:
我重新启动了apache,并运行了两个
php artisan config:clear
和
php artisan cache:clear
它仍在向宅基地用户提供某些东西,但我根本无法弄清楚在哪里。
答案 0 :(得分:0)
这是练习调试技巧的好任务! :)
所以,很明显Laravel从某个地方获得'宅基'用户名 - 可能是配置文件,代码中的默认值(实际上这不太可能,但我们正在调试)等等。
所以我的第一步是在Laravel应用程序的基本文件夹中执行此操作:
find . -type f -size -30k -exec grep -H "homestead" \{\} \;
哪个会在内部任何地方查找小于30千字节的文件,如果找到,则显示文件名和包含此模式的行。我们可以放心地假设“宅基地”没有存储在数据库的任何地方,因为它用于访问数据库,所以事先必须这样做。
找到地点后,修复错误可能就像编辑文件一样简单!
如果find没有返回结果,仍有可能:
如果您的Linux用户是“宅基地”,并且您尝试在未指定用户名的情况下连接到MySQL,则会自动使用“homestead”。这意味着Laravel由于某种原因无法访问您的配置文件(权限?错误路径?)
检查storage / logs / laravel.log并查看更多详细信息中的上一个错误。按文件浏览代码文件(错误中给出了文件列表,从顶部开始),看看它是如何获取MySQL用户名的。
答案 1 :(得分:0)
我真的不知道该特定构建发生了什么,但我正在关闭这个问题,只是为了完成它。我破坏了构建并重新开始没有任何问题。那里发生的事情将永远是一个谜。
答案 2 :(得分:-1)
您可以拥有多个database.php
配置文件。加载的配置文件取决于执行应用程序的上下文。
例如,我的项目中有三个不同的database.php
配置文件:
app/config/database.php
app/config/local/database.php
app/config/testing/database.php
在我的“测试”配置文件中,我定义了两个不同的连接:
return [
'default' => 'sqlite',
'connections' => array(
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'test',
'username' => 'user',
'password' => 'secret',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
'sqlite' => array(
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => ''
),
)
];
请注意default
密钥引用sqlite
,因此我在mysql
定义中输入的凭据无关紧要。 (除非我使用default
)
Config::set('database.default', 'mysql')
值
在config/
目录中搜索字符串'homestead'
。您将找到应用程序正在加载的配置文件。更改default
参数以匹配您要使用的连接。