🎉
Ruby BundlerでCPUアーキテクチャにあったgemをインストールする
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