解决 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.
推荐文章: