macOS Catalina下通过gem安装、更新fastlane报nil对象缺失request方法错误
报错根因
这个undefined method 'request' for nil:NilClass的异常不是fastlane安装包本身的问题,是三类问题叠加触发的:
- 当前使用的RubyGems 3.2.3版本存在已知的网络请求初始化逻辑bug,在网络请求实例创建失败时没有做异常拦截,直接尝试调用nil对象的方法抛出错误
- 本地Ruby 3.0.0部署在conda非系统路径下,直接加sudo执行gem命令时会触发环境变量错位,系统调用了自带的旧版RubyGems,和当前用户的Ruby运行环境不匹配
- macOS Catalina的系统根证书默认不被Ruby 3.0.0的OpenSSL模块识别,会直接导致网络请求实例创建失败返回nil
分步修复操作
- 第一步:升级RubyGems到兼容版本,不要用sudo执行系统级更新,直接在当前用户环境下运行:
gem update --system 3.3.22
不建议直接升级到最新版RubyGems,3.3.22是对Ruby 3.0.0兼容性最稳定的版本,不会引发新的依赖冲突
- 第二步:修复环境错位问题,不要直接加sudo执行gem命令。先通过
which gem获取当前用户环境下gem的完整可执行路径,再用sudo调用这个完整路径执行安装/更新操作,比如:
# 先查gem的实际路径 which gem # 假设输出为 /Users/yourname/.conda/envs/ruby3/bin/gem # 替换成这个完整路径执行安装,不要直接用sudo gem sudo /Users/yourname/.conda/envs/ruby3/bin/gem install fastlane -v 2.177.0 # 更新操作同理替换路径 sudo /Users/yourname/.conda/envs/ruby3/bin/gem update fastlane
- 第三步:修复SSL证书识别问题,重新初始化Gem源:
gem sources --remove https://rubygems.org/ gem sources -a https://rubygems.org/
- 如果执行后仍报相同错误,可以用临时关闭SSL校验的方式快速验证是否是证书链问题导致的请求失败:
gem install fastlane -v 2.177.0 --ssl-verify-mode 0
该参数仅用于排障,问题确认修复后不要长期关闭SSL校验,避免安全风险
- 排障前如果存在之前安装损坏的fastlane残留文件,先全部清除再操作:
gem uninstall fastlane --all --executables
长期使用建议
- 尽量不要在conda base环境下维护Ruby开发环境,推荐用rbenv、chruby这类专用的Ruby版本管理工具独立部署环境,避免conda环境和系统环境的PATH变量交叉污染,减少sudo执行时的路径错位问题
- 不要随意跨大版本升级RubyGems,优先选择和当前Ruby版本匹配的稳定分支版本,减少触发已知逻辑bug的概率
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

