新規アプリケーションを作成する際、% rails _5.2.3_ new
のようにバージョン指定をしても、それ以上のバージョンがインストールされてしまう場合の対処方法について解説したいと思います。
結論、%rails new
時に--skip-bundle
を指定しましょう。
エラー概要
Railsバージョン5.2.3で新規アプリケーションを立ち上げるため、以下のコマンドを打ち込みますが、なぜか5.2.4.1のバージョンがインストールされてしまいます。
% rails _5.2.3_ new SampleApp -d mysql
% rails -v
=> 5.2.4.1
エラー原因
こういった現象が起きてしまう原因はGemfileにあります。
% rails new
を実行すると自動的にgemfileが読み込まれるため、gemfileに記載されているRailsのバージョンが適用されてしまいます。
今回、新たに作成したアプリケーションのgemfileの中身を見てみましょう。
# Gemfile
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
ruby '2.5.1'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.2.3'
# 以下略
gem 'rails', '~> 5.2.3'
部分に着目してください。
この記述は、5.2.3以上のバージョンをインストールしますということを示しています。
この記述が原因となり、今回では5.2.4.1がインストールされていました。
解決方法
まずは--skip-bundle
を指定し、gemfileを読み込まずに% rails new
を実行します。
$ rails _5.2.3_ new SampleApp -d mysql --skip-bundle
続いて作成されたgemfileを以下のように編集し、railsのバージョン指定を「5.2.3以上」から「5.2.3のみ」に変更しましょう。
- gem 'rails', '~> 5.2.3'
+ gem 'rails', '= 5.2.3'
最後に% bundle install
を実行すれば完了です。
% bundle install
% rails -v
=> 5.2.3
まとめ
- 指定したバージョンが入らない場合の原因はgemfileにある
--skip-bundle
を指定し、gemfileを読み込まないように% rails new
を実行する
参考
今回は新規アプリケーションを作成する際、% rails _5.2.3_ new
のようにバージョン指定をしても、それ以上のバージョンがインストールされてしまう場合の対処方法について解説しました。Railsのバージョン指定がうまくいかないとなった場合は、Gemfileに着目してみてください。