🎉

Ruby BundlerでCPUアーキテクチャにあったgemをインストールする

2021/12/18に公開

M1 Mac で CPU が Intel 製から ARM 製に変わり、CPU アーキテクチャも変わりました。M1 Mac をローカル開発環境に利用していて、本番サーバが Intel アーキテクチャの場合、CPU アーキテクチャの違いにより、bundle installで失敗することがあります。

例えば、M1 Mac で開発して、Heroku に push すると失敗するみたいです。

このような場合は、Bundler を以下のようにプラットフォームを指定して、実行することで、そのプラットフォームに必要な gem の情報を Gemfile.lock に追記してくれます。

# x86(Intel)アーキテクチャに沿ったgemを追加したい場合
$ bundle lock --add-platform x86_64-linux

Gemfile.lockの PLATFORMS 欄に、bundle lock --add-platform xxxで指定したプラットフォームが追記され、そのプラットフォームで必要な gem の情報がGemfile.lockに追記されます。

Gemfile.lock
# 必要なgemの情報があれば追記される
......
 PLATFORMS
  aarch64-darwin-21  # M1 Macのプラットフォーム
  x86_64-linux       # bundle lock --add-platformで指定したプラットフォーム
......
# ARMアーキテクチャに沿ったgemを追加したい場合はこんな感じ
$ bundle lock --add-platform aarch64-linux

Discussion