【问题标题】:Laravel php artisan migrate command - no errors and no console output?Laravel php artisan migrate 命令 - 没有错误也没有控制台输出?
【发布时间】:2020-01-19 17:35:28
【问题描述】:

我最近在 macOS High Sierra 10.13.6 上通过自制软件全新安装了 mysql 8.0.19。可以看到我做brew services list的时候mysql服务已经启动了。我还可以使用mysql -u root 通过控制台登录并执行查询等等。

我使用 Valet 安装了一个全新的 Laravel 项目,但无法运行数据库迁移。我的环境变量看起来都是正确的:

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

我可以使用此信息(无 root 密码)连接到 MySQL Workbench。然而,每当我运行php artisan migrate 时,我都没有收到任何错误,也没有任何控制台输出。它只是卡住了。当我使用php artisan tinker 然后DB::connection()->getPdo() 时,也会发生同样的事情。没有输出也没有错误。 storage/logs 也没有登录。

相关config/database.php:

...

'default' => env('DB_CONNECTION', 'mysql'),


'connections' => [


    'mysql' => [
        'driver' => 'mysql',
        'url' => env('DATABASE_URL'),
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'prefix_indexes' => true,
        'strict' => true,
        'engine' => null,
        'options' => extension_loaded('pdo_mysql') ? array_filter([
            PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
        ]) : [],
    ],

],

...

在随机视图上转储DB::connection() 会产生正确的配置:

protected 'config' => 
    array (size=15)
      'driver' => string 'mysql' (length=5)
      'host' => string '127.0.0.1' (length=9)
      'port' => string '3306' (length=4)
      'database' => string 'laravel' (length=7)
      'username' => string 'root' (length=4)
      'password' => string '' (length=0)
      'unix_socket' => string '' (length=0)
      'charset' => string 'utf8mb4' (length=7)
      'collation' => string 'utf8mb4_unicode_ci' (length=18)
      'prefix' => string '' (length=0)
      'prefix_indexes' => boolean true
      'strict' => boolean true
      'engine' => null
      'options' => 
        array (size=0)
          empty
      'name' => string 'mysql' (length=5)

【问题讨论】:

  • 你尝试过其他工匠命令吗?
  • 是的,像php artisan make:policy Foobar 这样的东西可以按预期工作。我也可以很好地在浏览器中加载视图,只是没有数据库交互。
  • 您确定您的env 文件会覆盖您的配置文件吗?
  • 看起来像,php artisan tinkerenv('DB_DATABASE', 'foobar') 显示来自 .env 文件的正确信息。 config/database.php 文件看起来也正确。
  • 确保尝试将相同的信息从env文件复制到config\database.php文件

标签: php mysql laravel homebrew


【解决方案1】:

我尝试在一个普通的 PHP 脚本上运行一个简单的new mysqli(...),但它也失败了,所以这不是 Laravel 的事情。

在对此进行了更多研究之后,解决方案只是降级我的 PHP/MySQL 版本。我使用的是 PHP 7.4+ 和 MySQL 8+。我现在回滚到 PHP ~7.3 和 MySQL ~5.7。

我遇到了this recent thread,它详细说明了这个问题。与新的默认 MySQL 身份验证插件有关。我尝试在数据库中手动更改它,如该线程以及here 中所述,但没有任何运气。

回滚对我来说是最简单的,谢谢大家!

【讨论】:

    猜你喜欢
    • 2019-10-29
    • 2018-07-31
    • 2019-07-24
    • 2020-07-17
    • 2020-10-23
    • 2017-09-27
    • 2022-06-14
    • 2019-01-28
    • 2017-05-31
    相关资源
    最近更新 更多