解决 Homestead 版本与 homestead.box 不对应造成的冲突
说明
Homestead 包含了两个东西
- Homestead 管理脚本
- homestead.box 虚拟机盒子
接下来独自说明下。
1. Homestead 管理脚本
Homestead 管理脚本的作用是根据你在 ~/.homestead/Homestead.yaml
文件中的配置,来完成:
- Nginx Site 创建
- 数据库创建
- 文件夹挂载等任务。
版本历史在此 https://github.com/laravel/homestead/relea...
版本记录如下:
2. homestead.box 虚拟机盒子
homestead.box 盒子,所有版本历史在此 ,https://atlas.hashicorp.com/laravel/boxes/...
打不开的用户可以看下下图:
版本对应
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
时,就会发生类似以下的错误:
因为当你 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 管理脚本
进行版本限制,所以读者会遇到上面的版本冲突问题。
解决方案,就是:
- 备份你的
.homestead/Homestead.yaml
文件; - 命令行切到
Homestead
文件夹下,执行命令git checkout tags/v3.1.0 -b v3.1.0
检出 「Homestead 管理脚本」的v3.10
版本; - 命令行在
Homestead
文件夹下,执行命令bash init.sh
; - 把第一步备份的
.homestead/Homestead.yaml
文件重新覆盖; - 命令行切到
Homestead
文件夹下,执行命令vagrant provision
; - 重启 盒子,
vagrant halt
, 然后vagrant up
;
done.
我之前碰到过这种情况,
Homestead
的脚本是最新版本的,支持7.1,结果 box 里面实际是7.0版本。。 我记得当时的做法是把 vagrant 里面所有的scripts都做了一遍替换 7.1 替换成 7.0,好像还是有一个有问题,最后还是降了版本现在有一个问题是,我在使用 vagrant box add laravel/homestead 的时候,由于下载速度较慢,我用链接将 box 文件下载到本地,使用 vagrant box add laravel/homestead path-to-box-file 的方式去添加盒子。checkout homestead 目录之后 在里面使用 vagrant up 是报错的,这个时候我使用 vagrant init laravel/homestead 的方式重新生成一个 Vagrantfile 这个时候是可以启动成功的,但是问题在于启动成功之后没有映射目录,个人感觉应该是端口没有映射,现在正在寻找解决方案中 ...
@Heroic 问题已经解决,还没有发现具体是什么原因。方案是:把 ~/Homestead/script/homestead.rb 里面的
config.vm.box_version = settings["version"] ||= ">= 0.4.0"
改为
config.vm.box_version = settings["version"] ||= ">= 0"
然后便可以正常启动。
这是不是可以理解为homestead多个版本无法共存,除非每次都切换Homestead的版本分支?
可以多版本共存的,不过要修改几个文件而已,我尝试过,不过感觉没必要。。
现在遇到的一个问题是,可以正常启动,不过Homestead.yaml中配置的ip:192.168.10.10不起作用,不知哪位大神遇到过??
homestead环境按着网站教程里面一步步安装的,也没报错。安装完后访问不到网站
有没有谁遇见过这样的情况