解决 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
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 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年前 评论

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