rvmのgemsetを使ってRails3の開発環境を整える

Rails3は一時より安定したものの、まだまだバグもあるので頻繁にアップデートが重ねられていくことが予想されます。

アップデートが一段落するまでは、Rails2を使うというのもありですが、できればRails3も使っておきたい…

そんな気持ちでRails2とRails3の両方を使っていたら、気がついたらこのような状態になっていました。

$ gem list

*** LOCAL GEMS ***

abstract (1.0.0)
actionmailer (3.0.3, 3.0.0.rc2, 2.3.8)
actionpack (3.0.3, 3.0.0.rc2, 2.3.8)
activemodel (3.0.3, 3.0.0.rc2)
activerecord (3.0.3, 3.0.0.rc2, 2.3.8)
activeresource (3.0.3, 3.0.0.rc2, 2.3.8)
activesupport (3.0.3, 3.0.0.rc2, 2.3.8)

...<中略>...

rails (3.0.3, 3.0.0.rc2, 2.3.8)
railties (3.0.3, 3.0.0.rc2)
rake (0.8.7)
sqlite3 (1.3.3)
sqlite3-ruby (1.3.3)

...

カオス。

Rails3のバージョンが上がるたびに、gemに追加されていくとなるともっと酷くなってしまいます。
なので、rvmのgemsetを使ってRailsを切り替える方法を試してみることにしました。
以下はその方法のメモです。

rvmのインストール

今回の本題ではないので詳しく書きませんが、
RVMの公式ドキュメントや、id:mirakuiさんの記事が参考になります。

$ bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )

rvm gemsetの使い方

公式ドキュメントを参考に、gemsetを使ってみます。

rvmの場合、インストールされているruby毎にgemが存在します。
私の環境では、gemsetを使わない場合にはこのような感じ。

$ rvm 1.9.2
$ which gem
/home/takuya/.rvm/rubies/ruby-1.9.2-p0/bin/gem 
$ gem list
...
rails (3.0.3, 3.0.0.rc2, 2.3.8)
...

ここではgemsetを使ってRails3.0.3用と、Rails2.3.8用に分けてみます。

gemsetの作成
$ rvm gemset create rails303 rails238
'rails303' gemset created (/home/takuya/.rvm/gems/ruby-1.9.2-p0@rails303)
'rails238' gemset created (/home/takuya/.rvm/gems/ruby-1.9.2-p0@rails238)

gemset createで、新しいgemsetを作成します。
rvmのgemsディレクトリに新たにgemsetが作成されたことがわかります。

gemsetの選択
$ rvm ruby-1.9.2-p0@rails303

または

$ rvm gemset use rails303

とすることでgemsetを選択できます。(rails238も同様)

railsのインストール

それぞれのgemsetで、railsをインストールします。

$ rvm gemset use rails303
$ gem install rails -v 3.0.3
$ rvm gemset use rails238
$ gem install rails -v 2.3.8
確認
$ rvm gemset use rails303; rails --version
Rails 3.0.3

$ rvm gemset use rails238; rails --version
Rails 2.3.8

正しく設定されていれば、このようになるはずです。


これで、今後Rails3がバージョンアップしても、既存の環境と切り分けながら使えます。