升级到Fedora 37后RubyGems报错:psych-4.0.4加载失败
解决Fedora 35升级到37后Gem命令依赖缺失问题
问题描述
将系统从Fedora 35升级到37后,执行任何gem命令都会触发加载psych-4.0.4的错误,核心原因是:
- 系统当前Ruby版本为3.1.3,但原有的
stringio-3.0.4扩展文件编译依赖Ruby 3.0的libruby.so.3.0库,该库已随系统升级被移除 - 重装
rubygems无法解决问题,因为旧的扩展文件并未被替换
报错信息:
# sudo gem list <internal:/usr/share/rubygems/rubygems/core_ext/kernel_require.rb>:85:in `require': libruby.so.3.0: cannot open shared object file: No such file or directory - /usr/lib64/gems/ruby/stringio-3.0.4/stringio.so (LoadError) from <internal:/usr/share/rubygems/rubygems/core_ext/kernel_require.rb>:85:in `require' from /usr/share/gems/gems/psych-4.0.4/lib/psych/nodes/node.rb:2:in `<top (required)>' from /usr/share/gems/gems/psych-4.0.4/lib/psych/nodes.rb:2:in `require_relative' from /usr/share/gems/gems/psych-4.0.4/lib/psych/nodes.rb:2:in `<top (required)>' from /usr/share/ruby/psych.rb:15:in `require_relative' from /usr/share/ruby/psych.rb:15:in `<top (required)>' from <internal:/usr/share/rubygems/rubygems/core_ext/kernel_require.rb>:85:in `require' from <internal:/usr/share/rubygems/rubygems/core_ext/kernel_require.rb>:85:in `require' from /usr/share/rubygems/rubygems.rb:610:in `load_yaml' from /usr/share/rubygems/rubygems/config_file.rb:346:in `load_file' from /usr/share/rubygems/rubygems/config_file.rb:189:in `initialize' from /usr/share/rubygems/rubygems/gem_runner.rb:71:in `new' from /usr/share/rubygems/rubygems/gem_runner.rb:71:in `do_configuration' from /usr/share/rubygems/rubygems/gem_runner.rb:33:in `run' from /usr/bin/gem:21:in `<main>'
解决步骤
方法一:重装所有系统管理的Ruby相关包
系统中的Ruby扩展包由DNF管理,重装这些包会自动替换为适配Ruby 3.1的版本:
- (可选)列出所有已安装的Ruby相关包,确认范围:
dnf list installed ruby\* rubygems\* - 执行重装命令:
sudo dnf reinstall ruby\* rubygems\*
方法二:手动修复核心扩展(若方法一无效)
如果部分核心扩展未被正确替换,可单独处理:
- 备份旧的错误扩展目录(可选):
sudo mv /usr/lib64/gems/ruby/stringio-3.0.4 /tmp/ - 重装
stringio的系统包,获取适配Ruby 3.1的版本:sudo dnf reinstall ruby-stringio - 待
gem命令恢复正常后,重新安装之前手动部署的第三方gem:sudo gem install [目标gem名称]
注意事项
- 不要手动创建
libruby.so.3.0到libruby.so.3.1的软链接,Ruby不同小版本的ABI不兼容,会引发更严重的运行错误 - 若使用RVM/rbenv等版本管理器,需确保对应Ruby版本已重新编译或更新,避免依赖旧系统库
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

