Vagrant启用NFS时Composer update报错:addClassMap()需传入数组而非整数
解决Laravel Homestead启用NFS时Composer Update的TypeError问题
我之前也碰到过一模一样的糟心事——开着NFS跑composer update就弹出那个类映射的TypeError,关了NFS就正常,但又舍不得NFS给项目带来的速度提升。后来折腾了几个方法终于搞定了,分享给你:
1. 先调整NFS挂载选项试试
你原来用的NFSv3+UDP组合,在Windows+VirtualBox的环境下偶尔会出现文件系统元数据读取的bug,换成NFSv4+TCP试试,稳定性会好很多。修改Homestead.yaml里的folders配置:
folders: - map: C:\your\project\path to: /home/vagrant/code type: "nfs" mount_options: ['nolock,vers=4,tcp,noatime']
改完之后执行homestead.bat reload --provision重启虚拟机,再跑composer update看看效果。
2. 升级WinNFSd插件
旧版本的WinNFSd确实存在一些文件系统交互的小问题,更新到最新版大概率能解决这类奇怪的错误。在你的Windows主机上打开命令行,执行:
vagrant plugin update vagrant-winnfsd
更新完成后同样重启并provision虚拟机。
3. 把Composer缓存移到虚拟机本地
Composer的缓存文件如果放在NFS挂载的目录里,有时候会因为文件系统兼容性问题导致读取异常。我们可以把缓存目录改成虚拟机的本地目录(不在NFS挂载范围内):
在虚拟机里执行这两条命令:
mkdir -p ~/.composer/cache composer config -g cache-dir ~/.composer/cache
这样Composer的缓存就会存在虚拟机的本地磁盘,不会再受NFS的影响。
4. 检查并修复项目目录权限
偶尔NFS挂载会导致目录权限错乱,让Composer无法正确读取文件。在虚拟机里给你的项目目录设置正确的权限:
sudo chown -R vagrant:vagrant /home/vagrant/code sudo chmod -R 755 /home/vagrant/code
一般来说,先试前两个方法就能解决问题,如果还不行再试后面的。我当时是换了NFSv4的挂载选项就搞定了,你可以依次试试。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

