Vagarant/homestead 不会创建数据库,除非

Aar*_*ron 6 vagrant laravel homestead

我将 laravel/homestead box 升级到版本 11.1.0。然后令人惊讶的事情发生了:我的数据库消失了。如何?我不知道。但是,当我尝试使用 Homestead.yaml 重新安装数据库时,即使我在 Homestead.yaml 中添加了数据库列表,它也不起作用。

这是我在 Homestead.yaml 中所做的:

    databases:
        - db00
        - db01
Run Code Online (Sandbox Code Playgroud)

然后我运行了“vagrant provision”,但 MySQL 没有任何变化。“显示数据库;” 仅显示默认表。

然后我激活了功能:

     features:
        - mysql: true
        - mariadb: false
Run Code Online (Sandbox Code Playgroud)

然后我运行了“流浪者条款”并且它起作用了。我在 MySQL 中有两个数据库(db00 和 db01)。问题如下:

  1. 根据laravel v8.x 的 laravel/homestead 文档,没有 mysql 的功能选项。这导致在配置期间出现以下错误:

    homestead: Invalid feature: mysql
    homestead: Ignoring feature: mariadb because it is set to false
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将选项“- mysql”添加到 Homestead.yaml 后,我收到了 MariaDB 的以下错误

    homestead: Running: script: Creating MySQL / MariaDB Database: db00
    homestead: We didn't find a PID for mariadb, skipping $DB creation
    homestead: Running: script: Creating MySQL / MariaDB Database: db01
    homestead: We didn't find a PID for mariadb, skipping $DB creation
    
    Run Code Online (Sandbox Code Playgroud)

现在我的问题是:发生了什么事?如果没有功能选项“-mysql”,则不会创建数据库;无论我是否在数据库下定义列表。添加后,一切正常,生成数据库,但是,我收到错误消息,表明该功能无效。它也没有包含在文档中。我哪里出错了?或者是否有人有解释或更好的解决方案?

nul*_*l42 5

你两个问题的答案是:因为该文档有点误导

对于你的第一个问题,从技术上讲,mysql 不是一个可选功能,因为它是默认安装的。但是,为了v11.3.0配置自定义数据库,它必须列在以下内容的功能部分下Homestead.yaml

features:
    - mysql: true
Run Code Online (Sandbox Code Playgroud)

由于仅在mysql专门启用的情况下运行配置脚本: https:
//github.com/laravel/homestead/blob/v11.3.0/scripts/homestead.rb

对于第二个问题,由于脚本的create-mysql.sh实现方式而显示错误消息v11.0.0: https:
//github.com/laravel/homestead/blob/v11.0.0/scripts/create-mysql.sh

if [ -z "$mariadb" ]
then
      # Skip Creating MariaDB database
      echo "We didn't find a PID for mariadb, skipping \$DB creation"
else
      mysql -e "CREATE DATABASE IF NOT EXISTS \`$DB\` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci";
fi
Run Code Online (Sandbox Code Playgroud)

在您使用的配置中,条件将始终为 true,因为由于未启用,因此永远找不到 的if [ -z "$mariadb" ]进程 ID 。mariadbd因此,We didn't find a PID for mariadb, skipping $DB creation即使为 mysql 成功创建了数据库,该消息也将始终显示。从技术上讲,根据脚本的编码方式,这是正确的,但它也有点令人困惑。

另外,假设您遵循以下说明,那么为什么您的数据库在升级时消失了:
https://laravel.com/docs/8.x/homestead#updating-homestead

vagrant destroy命令将完全删除宅基地框并重建它。因此,除非配置为备份数据,否则任何数据或其他自定义配置都将丢失: https:
//laravel.com/docs/8.x/homestead#database-backups


hel*_*at_ 1

我最近在 Homestead 12.3.0 中遇到了同样的问题,并通过编辑Homestead.yaml以下内容解决了它:

...

databases:
    - homestead
    - my_database

features:
    # - mysql: true
    - mariadb: false
    - postgresql: false
    - ohmyzsh: false
    - webdriver: false

services:
    - "mysql"

...
Run Code Online (Sandbox Code Playgroud)

然后我运行vagrant reload --provision,并没有再看到MariaDB错误。

为了确认您可以通过 SSH 连接到 vagrant box,并登录 MySQL ( homestead/ secret)。就我而言,我发现数据库已正确创建。