如何修改已安装Gem(Photocopier)的net-ssh依赖版本?
问题分析与解决方案
旧版本net-ssh 6.1.0的可能来源
- 全局gem或rbenv版本干扰:测试脚本未通过
bundle exec运行,导致加载了rbenv全局版本或系统自带的net-ssh 6.1.0,而非bundle管理的7.2.1版本。 - 本地修改的Photocopier未生效:仅修改gemspec但未重新构建安装本地Photocopier gem,bundle仍在使用依赖6.1.x的旧版本。
- 其他依赖间接引入:少数情况下,可能有其他依赖gem偷偷依赖net-ssh 6.1.x,但这种情况通常会在Gemfile.lock中体现冲突,可能性较低。
切换到net-ssh 7.2.1的解决步骤
强制使用bundle环境运行脚本
执行测试脚本时必须添加bundle exec前缀,确保加载bundle管理的gem版本:bundle exec ruby your_test_script.rb确认本地Photocopier被bundle正确引用
若修改的是本地Photocopier代码,需在Gemfile中指向本地路径而非远程源:# Gemfile中替换为本地Photocopier目录路径 gem 'photocopier', path: './path/to/your/photocopier'修改后重新执行
bundle install。重新构建并安装修改后的Photocopier
进入Photocopier本地目录,执行命令更新本地gem:# 构建新的gem包 gem build photocopier.gemspec # 安装构建好的gem(替换xxx为实际版本号) gem install ./photocopier-xxx.gem清理bundle缓存并重新安装
清理旧缓存确保lock文件完全更新:bundle clean --force bundle install验证rbenv环境正确性
确认当前目录使用目标ruby版本,避免全局版本干扰:# 查看当前rbenv版本 rbenv version # 刷新rbenv环境 rbenv rehash排查版本加载差异
对比直接运行和bundle环境下的net-ssh版本,定位问题根源:# 查看直接ruby环境加载的版本 ruby -r net/ssh -e "puts Net::SSH::VERSION" # 查看bundle环境加载的版本 bundle exec ruby -r net/ssh -e "puts Net::SSH::VERSION"
内容的提问来源于stack exchange,提问作者Christer Fernstrom
相关产品推荐
相关产品推荐

