升级GitHub CI至Ubuntu 22.04后Rails项目出现LoadError如何解决?
解决Ubuntu 22.04下Ruby ffi gem的
libffi.so.6缺失问题 这个问题的核心原因很明确:Ubuntu 22.04默认预装的是libffi.so.7,而你当前使用的ffi 1.15.5是在Ubuntu 18.04环境下编译的,它依赖旧版本的libffi.so.6,迁移到新系统后自然找不到这个文件。下面是几个可行的解决办法,按推荐优先级排序:
1. 升级ffi gem到兼容版本
最稳妥的长期解决方案是升级ffi gem到支持Ubuntu 22.04的版本。ffi从1.15.6开始已经适配了libffi7,你可以直接更新Gemfile并重新锁定依赖:
- 修改Gemfile中的ffi声明:
gem 'ffi', '>= 1.15.6' - 本地运行
bundle update ffi,将更新后的Gemfile.lock提交到GitHub仓库。 - 重新触发CI工作流,此时bundle会安装适配新系统的ffi版本,编译时自动链接
libffi.so.7。
2. 清理CI中的bundle缓存,强制重新编译依赖
如果你的CI工作流启用了bundle缓存(比如GitHub Actions的actions/cache),可能缓存了旧环境下编译的ffi gem文件。可以临时清理缓存并重新安装:
- 在CI的依赖安装步骤中添加清理命令:
- name: Install Ruby dependencies run: | rm -rf vendor/bundle bundle install --jobs 4 --retry 3 - 这个操作会删除缓存的旧依赖,强制在Ubuntu 22.04环境下重新编译所有gem,包括ffi,确保链接正确的系统库。
3. 手动安装旧版本libffi.so.6(应急方案)
不推荐长期使用,但如果暂时无法升级gem,可以在CI中手动安装Ubuntu 18.04的libffi6包:
- 在CI步骤中添加安装命令:
sudo apt-get update sudo apt-get install -y libffi6 - 注意:这种方法可能引入依赖冲突,只适合临时过渡,最终还是建议升级gem版本。
内容的提问来源于stack exchange,提问作者maxagno3
相关产品推荐
相关产品推荐

