laravel 5 无法迁移

laravel 5 unable to migrate

我知道这个问题以前有人回答过,但是 none 的答案适用于我的情况。本质上,我有一个 Laravel 安装。我试着 运行

php artisan migrate

我收到以下错误:

 Access denied for user 'homestead'@'localhost'

现在开始了。我没有使用宅基地。这是一个标准的 LAMP 安装,我已经更改了 config/database.php 和 .env 文件中的数据库设置,以反映我的数据库的正确用户名和密码。我找不到 artisan 仍然尝试使用 homestead 用户的合乎逻辑的理由。我的 APP_ENV 设置为本地,在 app 或 config 文件夹中都没有生产文件夹。我不知道它将宅基地用户拉到哪里。

预计到达时间:

我已经重新启动了 apache,运行

php artisan config:clear 

php artisan cache:clear

它仍在将 homestead 用户从某个地方拉出来,但我就是想不通在哪里。

您可以有多个 database.php 配置文件。加载的配置文件取决于执行应用程序的上下文。

例如,我的项目中有三个不同的 database.php 配置文件:

app/config/database.php
app/config/local/database.php
app/config/testing/database.php

在我的 "testing" 配置文件中,我定义了两个不同的连接:

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 定义中输入什么凭据并不重要。 (除非我在运行时使用 Config::set('database.default', 'mysql') 覆盖 default 值)

在您的 config/ 目录中搜索字符串 'homestead'。您会找到您的应用程序正在加载的配置文件。更改 default 参数以匹配您要使用的连接。

这是练习调试技巧的好任务! :)

所以,很明显 Laravel 从某处获取 'homestead' 用户名——这可能是配置文件,代码中的默认值(实际上这不太可能,但我们正在调试),等等

所以我的第一步是在 Laravel 应用程序的基本文件夹中执行此操作:

find . -type f -size -30k -exec grep -H "homestead" \{\} \;

它会查找小于 30 KB 的文件,其中任何地方都包含 'homestead',如果找到 - 显示文件名和包含此模式的行。我们可以安全地假设 'homestead' 没有存储在数据库中的任何地方,因为它用于访问数据库,所以事先是必要的。

找到位置后,修复错误可能就像编辑文件一样简单!

如果发现returns没有结果,还有可能:

  1. 如果您的 Linux 用户是 'homestead' 并且您尝试连接到 MySQL 而未指定用户名,将自动使用 'homestead'。这意味着 Laravel 由于某种原因无法访问您的配置文件(权限?路径错误?)

  2. 检查 storage/logs/laravel.log 并查看最后一个错误的更多详细信息。逐个文件浏览代码文件(文件列表在错误中给出,从顶部开始)并查看它如何获取 MySQL 用户名。

我真的不知道那个特定版本发生了什么,但我关闭这个问题只是为了解决它。我丢弃了构建并重新开始,没有任何问题。那里发生的事情将永远是个谜。