使用gem安装指定版本bundler提示成功却报错且项目调用版本不符
问题成因
- 安装bundler 2.2.27时抛出的
Errno::ENOENT错误说明安装流程不完整:虽然rubygems将该版本标记为默认gem,但对应的元数据、可执行文件没有正确写入RVM的用户gemset路径,仅在Ruby内置的默认gem路径留存了部分不完整的文件 - RVM的gemset加载优先级规则:用户级gemset的可执行文件优先级高于Ruby内置默认gem的可执行文件,因此调用
bundle命令时,系统优先加载了用户gemset里的2.1.4版本,而非标记为默认的2.2.27 - Shell的可执行路径缓存未更新:安装新版本bundler后,shell仍保留了旧版本
bundle命令的路径缓存,不会自动匹配新安装的可执行文件
解决方案
- 先清除shell的可执行路径缓存,执行命令:
hash -r
执行后验证当前bundler版本:
bundle -v
如果返回2.2.27则问题解决,否则执行后续步骤。
- 尝试指定版本调用bundler执行项目安装:
bundle _2.2.27_ install
如果可正常执行,说明仅可执行文件的默认调用优先级异常,可直接通过指定版本执行,或执行下一步彻底修复。
- 彻底卸载所有本地bundler版本后重装:
首先卸载所有非2.2.27版本的bundler,出现删除可执行文件提示时选择「是」:
gem uninstall bundler -v '!= 2.2.27'
再强制卸载存在问题的2.2.27默认版本:
gem uninstall bundler -v 2.2.27 --force
之后重新安装指定版本并设为默认:
gem install bundler -v 2.2.27 --default
安装完成后再次清除shell缓存并验证版本:
hash -r && bundle -v
返回2.2.27即可正常执行项目依赖安装。
- 若以上操作后仍未解决,可重新加载RVM配置后再次验证:
source ~/.rvm/scripts/rvm bundle -v
内容的提问来源于stack exchange,提问作者jedi
相关产品推荐
相关产品推荐

