【问题标题】:laravel 5 unable to migratelaravel 5 无法迁移
【发布时间】:2016-04-12 09:04:59
【问题描述】:

我知道这个问题已经被回答过,但没有一个答案适用于我的情况。本质上,我安装了 Laravel。我尝试运行

php artisan migrate

我收到以下错误:

 Access denied for user 'homestead'@'localhost'

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

预计到达时间:

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

php artisan config:clear 

php artisan cache:clear

它仍在将宅基地用户从某处拉出来,但我根本不知道在哪里。

【问题讨论】:

  • 你试过php artisan cache:clear吗?
  • 回应对 OP 的编辑
  • 我也使用XAMPP 来安装我的本地 Laravel,不过之前没有遇到过这个问题。如果您对config/database.php 中的设置进行硬编码,问题是否清楚?
  • 没有。我将 .env 和 config/database.php 中的数据库设置设置为正确的凭据。它根本没有理由使用用户“Homestead”,因为该用户在 .env 或 config/database.php 中都不存在。我只是不知道它是从哪里绘制 Homestead 用户的
  • 同意,很奇怪。 php artisan tinker 然后 App::environment(); 输出什么?不确定在local 以外的环境中会如何,因为您已经在.env 中设置了它,但只是想跳出框框思考。

标签: laravel laravel-5.1 laravel-artisan artisan-migrate


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

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

【讨论】:

  • Laravel 5 没有这个层次结构。它存在于 Laravel 4
【解决方案2】:

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

所以,很明显 Laravel 从某个地方获取了“宅基地”用户名——这可能是一个配置文件、代码中的默认值(实际上这不太可能,但我们正在调试)等等。

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

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

它将在内部任何位置查找小于 30 KB 的包含“宅基地”的文件,如果找到 - 显示文件名和包含此模式的行。我们可以放心地假设 'homestead' 没有存储在数据库中的任何位置,因为它是用来访问数据库的,所以事先有必要。

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

如果 find 没有返回结果,还有可能:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2019-08-12
      • 2016-05-09
      • 2015-10-18
      • 1970-01-01
      • 2018-08-01
      • 2019-11-06
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多