三蔵開発メモ

Web開発やインフラ関連のメモを共有します

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を追加すると解決する場合がある。

blog.code-fabrik.ch

execjsとNode.jsを使う

上記でもエラーが出る場合は、mini_racerを使わない方法が楽。 要はmini_racerはJavascriptRailsで実行するためのものなので、 こちらで紹介されているように、execjsのgemを入れれば、最適なものを選んでJavascriptを実行してくれる。 blog.dnpp.org

※ リンク先にも説明があるが、Node.js以外でももちろん大丈夫。

CircleCIで行うときの注意点

Node.jsが入っていないイメージでビルド等している場合は入っているイメージを使う。

cimg/ruby:2.7.5-node

circleci.com