homestead 是我目前用过的最舒适的PHP开发环境,但因为一些众所周知的原因,每次重新安装或者更新换代的时候总会出现一些这样那样的问题。在此记录一下每次更新时踩过的坑并顺手造福一下大众。
¶安装步骤
- 安装
vagrant
- 安装
virtual box
- 下载
homestead
源码
以上步骤都完成后,随意找一个目录执行
vagrant box add laravel/homestead |
如果你对自己的网速很有自信,那么你可以选择等待它下载完成,但是在我大天朝这几乎是不存在的。于是只能选择其他的办法,在选择好对应的 provider(parallels、virtualbox、vmware_desktop) 之后,会输出 box 的最终下载路径如下(图是盗的,意思一下)
然后就可以 ctrl + c
停止下载,把上图中的 box 路径复制出来用其他多线程下载工具下载,比如迅雷什么的,下载完成后你将得到一个 .box
后缀的文件。
然后就可以使用 vagrant 以本地的方式加载box,但是会有一个问题,vagrant 加载本地的 box 是没有版本信息的。你如果这个时候执行 vagrant box list
会得到这样的信息
laravel/homestead (virtualbox, 0)
这个时候当我们 vagrant up
启动虚拟环境的时候就会每次都检查最新版本然后更新。
解决这个问题有两种方式,源自 stackoverflow:
-
直接在
Homestead.yaml
文件中配置一行version: 0
, 或在homestead
源码文件夹中找到scripts/homestead.rb
文件,将config.vm.box_version
这项配置改成 0 -
在 box 文件的根目录创建一个
metadata.json
文件,内容如下:{ "name": "laravel/homestead", "versions": [ { "version": "2.1.0", "providers": [ { "name": "virtualbox", "url": "virtualbox.box" } ] } ] }
version 里填写你的 box 的实际版本,url 填写你的 box 文件的相对路径,然后执行
vagrant box add metadata.json
这样就能保证box的版本信息正确。
¶踩坑记录
标题为 homestead 源码版本
¶v4.0.5
- vagrant: v1.9.3
- virtual box:v5.1.0
- homestead box: v2.1.0
- homestead source code: v4.0.5
¶The requested address is not valid in its context. - connect(2) for “0.0.0.0” port 8000 (Errno::EADDRNOTAVAIL)
完整报错信息:
E:/software/vagrant/embedded/gems/gems/vagrant-1.9.3/lib/vagrant/util/is_port_op
en.rb:21:in `initialize': The requested address is not valid in its context. - c
onnect(2) for "0.0.0.0" port 8000 (Errno::EADDRNOTAVAIL)
解决方案来自 stackoverflow
将 homestead 源码下 scripts/homestead.rb
文件中关于 port forwarding 的配置增加一个 host_ip
如下:
# Use Default Port Forwarding Unless Overridden |
¶启动虚拟环境时 composer 报错,[Composer\Downloader\TransportException]
具体报错信息:
==> homestead-7: The "https://getcomposer.org/download/1.4.2/composer.phar" fi |
如果你看到了这个报错那么恭喜你,天朝局域网又一次阻碍了人类的进步,解决方式有很多,翻墙或者将 homestead.rb
文件中关于 composer 更新的代码删掉或注释就可以,就是下面这段中的 sudo /usr/local/bin/composer self-update
这一句,当然后面的最好留着,不保证删掉之后会不会之后出现什么未知错误。
# Update Composer On Every Provision |