解决 Homestead 版本与 homestead.box 不对应造成的冲突

说明

Homestead 包含了两个东西

  1. Homestead 管理脚本
  2. homestead.box 虚拟机盒子

接下来独自说明下。

1. Homestead 管理脚本

Homestead 管理脚本的作用是根据你在 ~/.homestead/Homestead.yaml 文件中的配置,来完成:

  • Nginx Site 创建
  • 数据库创建
  • 文件夹挂载等任务。

版本历史在此 https://github.com/laravel/homestead/relea...

版本记录如下:

file

2. homestead.box 虚拟机盒子

homestead.box 盒子,所有版本历史在此 ,https://atlas.hashicorp.com/laravel/boxes/...

打不开的用户可以看下下图:

file

版本对应

Laravel 官方文档虽没有特殊说明,不过经过长时间对 Homestead 的使用得出来的结论:

Homestead 管理脚本homestead.box 虚拟机盒子 的版本是需要互相对应的。

例如说:Homestead 管理脚本 的 3.x 版本,对应盒子是 v0.6.x。

版本对应的分析

需要对应的原因,是因为 homestead.box 虚拟机盒子是一个完整的、指定的运行环境。

homestead.box v0.6.0 版本(非当前的最高版本)来说,里面的 Ubuntu 系统是 16.04,PHP 的版本是 7.0。

如果你使用的是 4.x 版本(当前的最高版本)的话,在 vagrant provision 后,运行 vagrant up 时,就会发生类似以下的错误:

file

因为当你 vagrant provision 后,「4.x 版本的 Homestead 管理脚本」会在生成 Nginx 站点是创建 fastcgi_pass 的参数为 php7.1-fpm (具体生成的 Nginx 配置信息见 源码),而你的 「homestead.box v0.6.0」中安装的是 PHP7.0 而不是 PHP7.1 ,所以就会导致上面的报错。

解决冲突

《Laravel 入门教程》 一书的环境搭建中,我们使用了 homestead.box v0.6.0 版本,但是没有对 Homestead 管理脚本 进行版本限制,所以读者会遇到上面的版本冲突问题。

解决方案,就是:

  1. 备份你的 .homestead/Homestead.yaml 文件;
  2. 命令行切到 Homestead 文件夹下,执行命令 git checkout tags/v3.1.0 -b v3.1.0 检出 「Homestead 管理脚本」的 v3.10 版本;
  3. 命令行在 Homestead 文件夹下,执行命令 bash init.sh
  4. 把第一步备份的 .homestead/Homestead.yaml 文件重新覆盖;
  5. 命令行切到 Homestead 文件夹下,执行命令 vagrant provision
  6. 重启 盒子,vagrant halt, 然后 vagrant up

done.

摈弃世俗浮躁,追求技术精湛
本帖已被设为精华帖!
本帖由系统于 6年前 自动加精
Summer
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 7

我之前碰到过这种情况, Homestead的脚本是最新版本的,支持7.1,结果 box 里面实际是7.0版本。。 我记得当时的做法是把 vagrant 里面所有的scripts都做了一遍替换 7.1 替换成 7.0,好像还是有一个有问题,最后还是降了版本

7年前 评论

现在有一个问题是,我在使用 vagrant box add laravel/homestead 的时候,由于下载速度较慢,我用链接将 box 文件下载到本地,使用 vagrant box add laravel/homestead path-to-box-file 的方式去添加盒子。checkout homestead 目录之后 在里面使用 vagrant up 是报错的,这个时候我使用 vagrant init laravel/homestead 的方式重新生成一个 Vagrantfile 这个时候是可以启动成功的,但是问题在于启动成功之后没有映射目录,个人感觉应该是端口没有映射,现在正在寻找解决方案中 ...

7年前 评论

@Heroic 问题已经解决,还没有发现具体是什么原因。方案是:把 ~/Homestead/script/homestead.rb 里面的
config.vm.box_version = settings["version"] ||= ">= 0.4.0"
改为
config.vm.box_version = settings["version"] ||= ">= 0"

然后便可以正常启动。

7年前 评论

这是不是可以理解为homestead多个版本无法共存,除非每次都切换Homestead的版本分支?

7年前 评论

可以多版本共存的,不过要修改几个文件而已,我尝试过,不过感觉没必要。。
现在遇到的一个问题是,可以正常启动,不过Homestead.yaml中配置的ip:192.168.10.10不起作用,不知哪位大神遇到过??

7年前 评论

homestead环境按着网站教程里面一步步安装的,也没报错。安装完后访问不到网站

3年前 评论

有没有谁遇见过这样的情况

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!