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没有结果,还有可能:
如果您的 Linux 用户是 'homestead' 并且您尝试连接到 MySQL 而未指定用户名,将自动使用 'homestead'。这意味着 Laravel 由于某种原因无法访问您的配置文件(权限?路径错误?)
检查 storage/logs/laravel.log 并查看最后一个错误的更多详细信息。逐个文件浏览代码文件(文件列表在错误中给出,从顶部开始)并查看它如何获取 MySQL 用户名。
我真的不知道那个特定版本发生了什么,但我关闭这个问题只是为了解决它。我丢弃了构建并重新开始,没有任何问题。那里发生的事情将永远是个谜。
我知道这个问题以前有人回答过,但是 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没有结果,还有可能:
如果您的 Linux 用户是 'homestead' 并且您尝试连接到 MySQL 而未指定用户名,将自动使用 'homestead'。这意味着 Laravel 由于某种原因无法访问您的配置文件(权限?路径错误?)
检查 storage/logs/laravel.log 并查看最后一个错误的更多详细信息。逐个文件浏览代码文件(文件列表在错误中给出,从顶部开始)并查看它如何获取 MySQL 用户名。
我真的不知道那个特定版本发生了什么,但我关闭这个问题只是为了解决它。我丢弃了构建并重新开始,没有任何问题。那里发生的事情将永远是个谜。