You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改已安装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的解决步骤

  1. 强制使用bundle环境运行脚本
    执行测试脚本时必须添加bundle exec前缀,确保加载bundle管理的gem版本:

    bundle exec ruby your_test_script.rb
    
  2. 确认本地Photocopier被bundle正确引用
    若修改的是本地Photocopier代码,需在Gemfile中指向本地路径而非远程源:

    # Gemfile中替换为本地Photocopier目录路径
    gem 'photocopier', path: './path/to/your/photocopier'
    

    修改后重新执行bundle install。

  3. 重新构建并安装修改后的Photocopier
    进入Photocopier本地目录,执行命令更新本地gem:

    # 构建新的gem包
    gem build photocopier.gemspec
    # 安装构建好的gem(替换xxx为实际版本号)
    gem install ./photocopier-xxx.gem
    
  4. 清理bundle缓存并重新安装
    清理旧缓存确保lock文件完全更新:

    bundle clean --force
    bundle install
    
  5. 验证rbenv环境正确性
    确认当前目录使用目标ruby版本,避免全局版本干扰:

    # 查看当前rbenv版本
    rbenv version
    # 刷新rbenv环境
    rbenv rehash
    
  6. 排查版本加载差异
    对比直接运行和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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 04:53:31