Railsアップグレード等でmini_racerやlibv8-nodeなどがビルドエラーになって更新できない問題の対応
Railsの6.0から6.1にアップグレードするだけでもかなりハマってしまったのでメモ。
bundlerを最新にする
これだけでも解決することがある。
BUNDLER_VERSION=2.3.9 gem install bundler -v ${BUNDLER_VERSION} bundle _${BUNDLER_VERSION}_ install --jobs=4 --path vendor/bundle
インストールをDocker等でコード化している場合は上記のように明記しておくと管理しやすい ※ BUNDLER_VERSIONは環境変数などにしておく
gem update --systemをする
上記とセットでした方がよりよい。ビルドをしているサーバーなどで行う。
gem update --system
プラットフォームを追加
libv8_monolith.a: No such file or directory
このようなエラーがCircle CIやLinux上のJenkinsなどでビルド中に出る場合は、
bundle lock --add-platform x86_64-linux
こちらのコマンドを実行して必要なgemを追加すると解決する場合がある。
execjsとNode.jsを使う
上記でもエラーが出る場合は、mini_racerを使わない方法が楽。 要はmini_racerはJavascriptをRailsで実行するためのものなので、 こちらで紹介されているように、execjsのgemを入れれば、最適なものを選んでJavascriptを実行してくれる。 blog.dnpp.org
※ リンク先にも説明があるが、Node.js以外でももちろん大丈夫。
CircleCIで行うときの注意点
Node.jsが入っていないイメージでビルド等している場合は入っているイメージを使う。
cimg/ruby:2.7.5-node
等