はじめに
AWSを利用してアプリケーションを公開しています。RailsアプリケーションをEC2にデプロイしている際に、Gemをインストールするためにbundle installを実行したところ、以下のような表示から先に進まなくなってしまいました。
Installing gem名 gemのバージョン with native extensions
Building native extensions. This could take a while…
原因
しばらく待っても上記の状態から進まなかったため、プロセスを中断し、何が問題かを探るべくログを確認しました。その結果、bundle installが4つのプロセスで並行して実行されていることがわかりました
DEBUG [b81b3574] Command: ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="3.0.3" ; $HOME/.rbenv/bin/rbenv exec bundle install --jobs 4 --quiet )
この情報を基にいろいろと調べたところ、複数のプロセスでbundle installを実行した際に、そのうちのどれか1つでも問題が発生すると、複数のプロセスのすべてが止まってしまうということがわかりました。
そこで、1つのプロセスでbundle installを実行することで、どのGemに問題があるのかを特定できるのではないかと考えました。
実施した対応
複数のプロセスでの実行ではなく、1つずつbundle installを実行するように変更しました。
bundle install --jobs=1
結果
エラーの原因となっているGemを特定するために上記の対応を行いましたが、結果的にこれでbundle installが成功しました。
原因を調査
一つずつbundle installを実行したことで問題が解消されたという結果から、個々のGemに不具合は存在しなかったのではないかと考えました。
そこで、bundle installがうまくいかなかった原因を調べたところ、以下のような可能性があることがわかりました。
- EC2インスタンスのリソース不足
- 並列でインストールを行った場合、Gemの依存関係が適切に処理されないことがある
- 並列処理が原因でプログラムが予期せぬ挙動を示し、エラーやバグが発生する可能性がある
おわりに
今回は、AWSのEC2インスタンスでbundle installを実行した際に直面したトラブルと、それに対する解決方法について共有させていただきました。同じ問題でお困りの方がいらっしゃれば、この記事が一助となれば幸いです。