Ruby 1.8.7(RHEL7环境)下Gem安装报错及降级Rubygems失败求助
针对Ruby 1.8.7 + Rubygems 2.7.6安装Gem报错的解决方案
我之前维护老项目时碰到过一模一样的问题,Ruby 1.8.7这种古董版本和新版本Rubygems的兼容性坑确实不少,给你几个亲测有效的方案:
方案1:安装兼容Ruby 1.8.7的psych旧版本
你猜的没错,Gem::Package::PathError很多时候是因为psych依赖不兼容,但不用盯着高版本psych——老版本的psych完全支持Ruby 1.8.7。具体步骤:
- 先卸载可能存在的不兼容psych版本:
gem uninstall psych(如果提示多个版本,选全部卸载) - 指定兼容版本安装:
gem install psych -v 1.3.4 - 安装完后再尝试安装你需要的Gem,比如
gem install your-target-gem
方案2:手动降级Rubygems到兼容版本
你之前降级失败大概率是用了gem update --system这种方式,Ruby 1.8.7根本不支持新版本Rubygems的降级命令,得用手动安装的方式:
- 找到和Ruby 1.8.7匹配的Rubygems版本(推荐1.8.x系列,比如1.8.30,这是最后一批支持Ruby 1.8.7的版本)
- 下载该版本的Rubygems压缩包,解压后进入目录
- 执行安装命令:
ruby setup.rb --no-ri --no-rdoc - 验证版本:
gem -v,确认显示1.8.30之类的兼容版本 - 之后再安装Gem就不会有兼容性冲突了
方案3:临时禁用psych依赖(应急用)
如果上面两个方案都暂时走不通,可以尝试跳过psych的依赖检查(注意:仅当目标Gem不强制依赖psych时可行):
- 设置环境变量跳过psych:
export GEM_SKIP=psych - 安装目标Gem时加上参数:
gem install your-target-gem --no-document
方案4:用版本管理器隔离干净环境
如果系统自带的Ruby环境被折腾得乱七八糟,可以用rbenv(或者rvm)在用户目录下搭建一个独立的Ruby 1.8.7环境,完全不影响系统Ruby:
- 安装rbenv(通过源码或者包管理器,RHEL7可以用yum装依赖后克隆源码)
- 安装Ruby 1.8.7的具体补丁版本:
rbenv install 1.8.7-p374 - 设置当前目录使用这个版本:
rbenv local 1.8.7-p374 - 安装兼容的Rubygems版本(比如1.8.30)
- 这个干净的环境下安装Gem基本不会有兼容性问题
补充说明
Rubygems 2.7.6是为Ruby 2.3+设计的,和Ruby 1.8.7的API差异极大,这才是导致Gem::Package::PathError的根本原因——所以核心思路就是让Rubygems版本和Ruby 1.8.7严格匹配,或者用兼容的psych版本填补依赖缺口。
内容的提问来源于stack exchange,提问作者wwwdavid34
相关产品推荐
相关产品推荐

