アプリなどを開発するブログ

React Native / Swift / Ruby on Railsなどの学習メモ。


Rails プロジェクト が GitHub Actions で実行失敗する場合の対処

先日まで動いていたRailsプロジェクトのCI (GitHub Actionsで構築) で、rails関連コマンドが失敗している事に気がついた。

Run ./bin/rails db:reset rails aborted! LoadError: libffi.so.6: cannot open shared object file: No such file or directory - vendor/bundle/ruby/2.6.0/gems/ffi-1.13.1/lib/ffi_c.so

ffiというRailsの依存ライブラリがないというエラー。
ffiというライブラリの存在をそもそも知らなかったのだが、Rubyからネイティブライブラリを呼ぶためのライブラリの模様。 libffiというライブラリがあり、そのRubyラッパーのようだ。

github.com

www.slideshare.net

そんなライブラリが存在しないと怒られている。
しかしGemfileも更新していないので、GitHub Actions側の何かしらの変更に起因するものだろう。

ちょうど、2020年の年末あたりからubuntu-latestのバージョンが18.04から20.04に段階的にアップグレードされていたようだ。

ffiのissuesにも、「Ubuntu 20.04 LTS issue with ffi gem : expects libffi6 to be installed whereas this distro contains libffi7」 というものが上がっており、これでほぼ間違いないだろう。

github.com

そこで、.github/workflows/main.ymlを

name: CI

on: push

jobs:
  build:
    # runs-on: ubuntu-latest これを
    runs-on: ubuntu-18.04 # バージョン固定に変更

とすると、CIが通った。
ライブラリ側 (ffi) が対応するのを待って固定を解除すればよさそうだ。