You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 18:09:26