Rails tutorialをやり始めました。
その時の気づいたこととか備忘録です。
今回は第1章1.3.1 Bundler第1章 ゼロからデプロイまで | Rails チュートリアル
でのGemfileのversionの指定方法について。
TL;DR
>= : gem 'Hoge', '>=x.y.z'
x.y.z以上のVerが最新の場合、それをインストールする。(メジャーアップデートも行う。)
~= : gem 'Hoge', '~= x.y.z'
マイナーアップデートは行うが、メジャーアップデートは行わない。
例gem 'Hoge', '~= 1.2.4'
v1.2.5となった際はアップデートを行うが
v1.3.0 になってもアップデートは行わずv1.2.5のまま
Version指定
Gemfileのversion指定が曖昧の場合
環境構築する際に、Gemfileのバージョン指定は曖昧のままでもできますが、
gemがアップデートした際にローカルがアップデートされないことがあります。
マイナーアップデートで止めたい理由
自分がPG始めたての頃は、なんかGemfileが勝手に出来上がってるけど、動くから
っと思ってこの辺りは曖昧でしたが、
~と>の違いがわからないとメジャーアップデートされなかったり、
勝手にメジャーアップデートされて動かなくなることもあります。
メジャーアップデートされるとPS2からPS3になることもあります。
なのでアップデートをマイナーアップデートで止めておきたいことは多々あります。
Version方法
ということで、Versionの指定方法です。
メジャーアップデート
メジャーアップデートも含めたい場合
gem 'hoge', '>=1.2.3'
みたいな感じにすれば
bundle update
(すでにインストール済みのgemをupdateする場合)
もしくは
bundle install
時にver1.2.3以上のgemがある場合はメジャー、マイナー問わずそのversionでインストールします。
マイナーアップデート
マイナーアップデートのみの場合
gem 'hoge', '~=1.2.3'
としたら、
ver1.2.4がある場合はそちらをインストールしますが、
ver1.3.0以上があっても、それはメジャーアップデートとして、そちらはインストールしません
部分的なメジャーアップデート
またver1.2.3以上でかつ1.3.xをインストールしたいが、1.4.x以上はインストールしたくない場合は
gem 'hoge', '>= 1.2.3', '< 1.4'
とします
ヴァージョン指定
またメジャー、マイナーバージョンに問わず、Versionを指定したい場合は
gem 'hoge', '1.2.3'
とします。