※ GitHub Issue に調査結果を書いた のでこちらにも転載
Rails の複数バージョンがインストールされている環境で、どのようにバージョンが切り替わるのか、調査
TL;DR
プロジェクトディレクトリの内外で、Rails に訊ねたバージョンが切り替わる
状況説明 & 再現手順
状況説明を兼ねて、再現手順を記載
大まかな流れ
再現手順
状況を同じにするため、次のコマンド群を打つことで再現可能にします
Rails のインストール (複数バージョン)
# バージョンを指定して Rails をインストール # 2 つの、異なるバージョンをインストールする gem install rails -v 5.2.4.3 gem install rails -v 6.0.3.2
バージョンを確認
# インストール済みの gem のリストを表示 (Rails) # (正規表現で「rails」で始まって終わる語を絞り込み) gem list --local ^rails$ # => # *** LOCAL GEMS *** # # rails (6.0.3.2, 5.2.4.3)
今有効なバージョンは?
cd ~ # Home ディレクトリに移動 # 最新バージョンが返ってくる rails -v # => 6.0.3.2
バージョンを指定して Rails プロジェクト作成
# # 旧版を指定してプロジェクト作成 # mkdir my_project && cd $_ # プロジェクトディレクトリを作成して移動 rails _5.2.4.3_ new . --skip-bundle
プロジェクトディレクトリ 内・外で Rails のバージョン確認
プロジェクト内
pwd # => /[...snip...]/my_project rails -v # => 5.2.4.3 bundle e rails -v # => 5.2.4.3
Rails の場合、プロジェクト内のバージョンを優先的に利用する処理が記述されているらしい
Ref: Rails 4.1以降のコンソールコマンドは必ず bin/ を付けなきゃいけないの? - Qiita , なんで bin/ がいらないの?
(つまり、Rails でない場合、 bundle exec
無しだと ここで最新バージョンが返ってくる)
プロジェクト外
cd ~ # Home ディレクトリに移動 # 最新バージョンが返ってくる rails -v # => 6.0.3.2