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ラッパーのようだ。
そんなライブラリが存在しないと怒られている。
しかし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/workflows/main.ymlを
name: CI on: push jobs: build: # runs-on: ubuntu-latest これを runs-on: ubuntu-18.04 # バージョン固定に変更
とすると、CIが通った。
ライブラリ側 (ffi) が対応するのを待って固定を解除すればよさそうだ。