执行vagrant up安装VVV时遇类型错误:nil无法转为字符串
解决VVV安装时
vagrant up触发的vagrant-hostsupdater TypeError错误 我之前碰到过完全一样的问题!这个报错的核心原因很明确:vagrant-hostsupdater插件在生成临时命令文件的时候,需要拼接一个uuid值,但此时@machine.id和配置里的@machine.config.hostsupdater.id都是空的(nil),直接和字符串拼接就触发了no implicit conversion of nil into String的类型错误。
至于为什么教程里没出现这个问题,大概率是这几个原因:
- 教程使用的VVV或vagrant-hostsupdater版本和你不一样,旧版本的插件可能没有这个nil值处理的bug,或者新版本的VVV模板已经默认配置了hostsupdater的id;
- 教程里的环境之前已经初始化过虚拟机,
machine.id已经生成并保存在本地,而你的环境是全新的,虚拟机还没完成基础初始化就触发了hostsupdater的逻辑。
给你几个亲测有效的解决办法:
方法一:手动给hostsupdater指定id
打开你的VVV项目里的Vagrantfile,找到hostsupdater的配置块(如果没有就新增),添加一个固定的id值:
config.hostsupdater.id = "vvv-local-machine"
保存后重新运行vagrant up,插件就能拿到有效的字符串id来拼接临时文件路径了。
方法二:更新vagrant-hostsupdater插件
这个bug在新版本的插件里已经被修复了,试试卸载重装最新版:
vagrant plugin uninstall vagrant-hostsupdater vagrant plugin install vagrant-hostsupdater
更新完成后再执行vagrant up,应该就能正常运行了。
方法三:临时跳过hostsupdater步骤(应急用)
如果你只是想先让虚拟机跑起来,可以暂时跳过hostsupdater的执行:
vagrant up --no-provision
等虚拟机启动完成后,你可以手动修改本地hosts文件添加域名映射,或者再单独执行vagrant provision来完成后续配置。
内容的提问来源于stack exchange,提问作者Solanki Ketul
相关产品推荐
相关产品推荐

