やっぱり RVM は便利だ!

http://beginrescueend.com/images/logo.png

Ruby on Rails3.1rc4がリリースされ、Ruby on Rails3.1のリリースも近づいてきたもようです。私の開発したRuby on Railsアプリも 2.3.8, 2.3.10, 3.0.5 などのバージョンがあり開発環境のMacの上では、ここに書いたような方法でなんとか共存しています。
しかし、ここに 3.1 が加わると、確実に破綻しそうです、なぜならRuby on Rails3.1 では Ruby1.9.2が推奨だからです。

そこで、RVM(Ruby Version Manager)を導入しました、これは複数Ruby, Gemライブラリーを切り替えて使えるようにしてくれる素晴らしいツールです。

※ 7/25 Lion 対応

rvm の情報

RVMのインストール

ここ に書かれています。

% bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
% vi .zshrc
---------------- 以下の行を追加、 bashでも同じ。
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function
-----------------------------------------
% source .zshrc
% type rvm | head -1
rvm is a shell function  と表示されれば OK (bashは表示が少し違うようです) 

Rubyのインストール

rvm は~/.rvm以下に ruby処理系やgemライブラリーをインストールします。ただし、Macの場合は ここ の手順でインストールすると irb で日本語が入力出来なくなっていましいます。
対処としては、既存の MacPortsreadlineライブラリーを使う方法もありますが、私の環境ではその場合 rspec実行でエラーが発生してしまいました。そこで RVM が用意しているreadline をインストールする方法で上手くいきました。 Lionではだいじょうぶ

% rvm install 1.8.7 

Rubyだけでなく、gem や rake もインストールされます。

ruby 1.9.2 のインストールは同様です。

% rvm install 1.9.2  

Gemライブラリーのインストール

rvm は 実行する ruby の切り替えに加え、Gemライブラリーの切り替えも gemsetsという単位できます。 今回は rails2.3用、rails3.0用、rails3.1用のgemsetsを作りました。

Rails2.3用のGemは実行環境等を参考に version を指定して適切なバージョンのgemをインストールします。

% rvm use 1.8.7       ← ruby1.8.7を使えるように切り替える
% rvm gemset create rails2.3
% rvm gemset create rails3.0

% rvm gemset use rails2.3  ← rails2.3用gemを使えるように切り替える
% gem list      ← この時点ではrakeしか入ってない
% gem install rails -v 2.3.10
% gem install rspec -v 1.3.4
  ...

rails3.0用のgemは bundlerをインストールし、後は bundle install でインストールしました・・・便利!

% rvm gemset use rails2.3  ← rails2.3用gemを使えるように切り替える
% rvm gemset use rails3.0
% gem install bundler
% cd Railsプロジェクト
% bundle install 

Rails3.1は ruby1.9.2に切り替え

% rvm use 1.9.2
% rvm gemset create raiils3.1
% rvm gemset use rails3.1
% gem install rails --pre
% ...

rvm の使い方

rubyの切り替えとgemの切り替えは以下のように同時に指定できます。

% rvm use 1.8.7@rails3.0

また、Railsプロジェクトディレクトリーに .rvmrcファイルを作り

rvm use ruby-1.8.7@rails3.0

のように書く事で、そのプロジェクトプロジェクトディレクトリーに cd した時に rubyとgemを切り替えてくれます。 とっても便利!