gpt4 book ai didi

laravel - Vagrant/homestead 不会创建数据库,除非

转载 作者:行者123 更新时间:2023-12-04 17:18:57 24 4
gpt4 key购买 nike

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

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

    databases:
- db00
- db01

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

然后我激活了这些功能:

     features:
- mysql: true
- mariadb: false

然后我运行了“vagrant provision”,它成功了。我在 MySQL 中有两个数据库(db00 和 db01)。以下是问题:

  1. 基于 laravel/homestead documentation for laravel v8.x , 没有 mysql 的功能选项。这在配置期间导致了以下错误:

    homestead: Invalid feature: mysql
    homestead: Ignoring feature: mariadb because it is set to false
  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

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

最佳答案

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

对于您的第一个问题,mysql 在技术上不是可选功能,因为它是默认安装的。但是,从 v11.3.0 开始,为了提供自定义数据库,它必须列在 Homestead.yaml 的功能部分下:

features:
- mysql: true

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

对于你的第二个问题,显示错误消息是由于 v11.0.0create-mysql.sh 脚本的实现方式:
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

使用 if [ -z "$mariadb"] 条件的配置将始终为真,因为永远不会找到 mariadbd 的进程 ID,因为它未启用。因此 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

关于laravel - Vagrant/homestead 不会创建数据库,除非,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67319605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com