RVM在macOS 11.2.3安装Ruby 1.9.3-p551报Rubygems语法错误求助
环境与报错前提
- RVM版本:1.29.12
- 运行系统:macOS 11.2.3
- 目标安装版本:Ruby 1.9.3-p551
- 报错触发节点:RVM自动安装对应版本rubygems、执行全局gemset pristine初始化操作时
- 核心冲突:Ruby 1.9.3 不支持Ruby 2.0+才引入的关键字参数语法,与RVM错误加载的rubygems 3.0.9版本存在语法级不兼容
根因定位
从安装日志可直接定位问题:
- 日志中的语法错误指向rubygems-3.0.9源码内
kernel_warn.rb文件的代码行:module_function define_method(:warn) {|*messages, uplevel: nil|,其中uplevel: nil的关键字参数写法是Ruby 2.0才支持的语法,Ruby 1.9.3完全无法解析,直接触发SyntaxError导致整个安装流程中断 - RVM 1.29.12默认逻辑本应给Ruby 1.9.3匹配低版本兼容rubygems,但本地残留的高版本rubygems源码包会触发错误加载逻辑,跳过版本匹配步骤直接使用不兼容版本
- macOS 11的系统编译SDK对2014年发布的Ruby 1.9.3存在原生兼容问题,无对应补丁的情况下哪怕解决了rubygems兼容问题,也会在编译阶段触发函数声明类的编译错误
分步修复操作
按顺序执行所有命令即可:
- 强制清理本地残留的不兼容安装文件
rvm remove ruby-1.9.3-p551 --force rm -rf ~/.rvm/src/rubygems-3.0.9 rm -rf ~/.rvm/src/ruby-1.9.3-p551 - 预先设置macOS编译兼容参数,避免后续编译报错
export CFLAGS="-Wno-error=implicit-function-declaration" - 执行安装时明确指定兼容的rubygems版本(2.4.5是最后一个完整支持Ruby 1.9.3的rubygems版本),同时加载RVM内置的macOS兼容补丁
rvm install ruby-1.9.3-p551 --rubygems 2.4.5 --patch ruby-1.9.3-macos-big-sur-compatibility.patch - 安装完成后验证环境状态
正常返回需匹配:Ruby版本为1.9.3p551,gem版本为2.4.5,无语法类报错rvm use ruby-1.9.3-p551 ruby -v gem -v - 手动执行一次gemset初始化,彻底解决之前pristine命令的报错
rvm gemset pristine
常见踩坑提示
- 不要尝试手动修改高版本rubygems的语法代码,老旧Ruby的语法兼容问题覆盖范围广,修改单文件会触发连锁的其他语法报错
- 不要跳过
--rubygems 2.4.5的参数指定,否则RVM依然会自动拉取3.x版本的rubygems,重复触发相同的语法错误 - 如果安装过程中报OpenSSL相关的依赖错误,可在安装命令后追加
--with-openssl-dir=$(brew --prefix openssl@1.1)参数,匹配macOS的openssl依赖路径
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

