Docker上に構築したRailsで以下のようなエラーが出るときの対処法について。
Warning: the running version of Bundler (x.x.x) is older than the version that created the lockfile
現在使っているbundlerのバージョン2.1.4だが、lockfileで指定されているバージョンは2.2.22で、それよりも古いので、lockfileで指定したバージョンに変更することを推奨するという警告。
警告(Warning)なので、対応しなくてもプログラムは動くが、rails系のコマンドを実行するたびに毎回表示される。
エラー対処法
Railsアプリケーションのルートディレクトリで gem install bundler:2.2.22
を実行する。
Dockerの場合はコンテナの中から実行する。
#DockerのRailsコンテナに入る
$ docker exec -it <コンテナ名> bash
root@93ac4f1a0c1d:/#
#bundlerのインストール
root@93ac4f1a0c1d:/rails-vue# gem install bundler:2.2.22
Fetching bundler-2.2.22.gem
Successfully installed bundler-2.2.22
1 gem installed
以上でエラーが表示されなくなる。
bundlerインストール後もエラーが出続ける場合の原因と対処法
上記で指定されているコマンドgem install bundler:2.2.22
を実行して、指定のbundlerは正しくインストールされても、bundlerが切り替わらず、同じ警告がで続ける場合があります。
▼bundlerは正しくインストールされている
$ bundler -v
Bundler version 2.2.22
原因
gemで複数のbundlerのgemを管理でき、rails new
でプロジェクトを起動した時にその時点でのbundlerのバージョンがデフォルトとして指定されてしまう。
▼インストールされているバージョンの確認
$ gem list | grep bundler
bundler (2.2.22, default: 2.1.4)
2.2.22と2.1.4の2つがインストールされていて、そのうち、2.1.4がデフォルトとして設定されている。
対処法
gem自体のバージョンをアップデートする。(5分ほどかかる)
$ gem update --system
▼実例
#gemをアップデート
$ gem update --system
Updating rubygems-update
(省略)
#バージョンの確認
$ gem list | grep bundler
bundler (default: 2.2.22)
デフォルトのバージョンが2.2.22に切り替わった。
以上で設定完了。
bundlerとは?
bundlerとは、Rubyのパッケージであるgem同士の互換性を保つためのツールです。
bundle installを実行すると、bundlerが、gemfileに記述されているgemを動かすために必要な他のパッケージや最適なバージョンに合ったものを自動で探してインストールしてくれます。
bundler自体もgemの一種です。