Dockerで作成したrailsアプリにgemを追加したとき発生したエラー(Bundler::GemNotFound)の解決方法
Bundler::GemNotFound について
Dockerを用いてrails アプリを作成し、dotenv-rails という gem を追加し、コンテナを作成・起動(docker-compose up)したとき下記のようなエラーが起きました。
Could not find dotenv-rails-2.8.1, dotenv-2.8.1 in locally installed gems (Bundler::GemNotFound)
エラー内容は Gemfileに追加したgemが見つからないということです。
色々調べていくと、Gemfileの変更内容がDockerイメージに反映されていないから発生したらしいです。
つまり、Dockerを用いて作成したrails アプリにgemを追加したときは、docker-compose build コマンドを実行し、Dockerfileを再度ビルド実行し、Dockerイメージを更新する必要があるそうです。
図にすると下記のような感じ。
そこで、上記の記事を参考に下記のコマンドを実行しました。
# Dockerイメージをビルド
docker-compose build
# コンテナを作成・起動
docker-compose up
すると、rails アプリを起動させることができました。
また、今回、gem追加後、docker-compose build コマンドを実行し、追加したgemの内容をDockeImage にも反映させましたが、buildし直すのが面倒な場合、docker-compose.ymlに設定を記述して回避することもできるそうです。下記参照。
参考
gem追加後にBundler::GemNotFound エラーが発生する理由と解決方法
https://qiita.com/koyo-miyamura/items/5f1d123046917782e111
https://qiita.com/mom0tomo/items/2e7f7c2dbe2855b2c91d
https://qiita.com/hokita222/items/49f4ca54835e08fdd6b2
https://mashoo1101.hatenablog.com/entry/2022/02/23/130001
gem追加後に docker-compose buildし直さなくても良い設定方法
https://qiita.com/neko-neko/items/abe912eba9c113fd527e
Discussion