Rails2.0とRails1.2を共存させる方法

というかコマンド付きのgemを複数バージョンを共存させる方法。

コマンドの第一引数に_【バージョン】_を渡します。

$ rails _1.2.6_ -v
Rails 1.2.6
$ rails _2.0.2_ -v
Rails 2.0.2

Railsの場合はrailsコマンドでアプリの外枠を作ってしまえば、それ以降はこの指定は必要ない(config/environment.rbでRAILS_GEM_VERSIONしてるので)。ということでRails自体は1.2.6から勉強したい(参考書も多いし)けど、たまには2.0系のコードも読んでみたい、という人なんかはこうするとよいかと。

もっとちゃんと知りたいという人は、gemで入れるとコマンドがこうなるということを知っておけばOK。で

require 'rubygems'

version = ">= 0"

if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
  version = $1
  ARGV.shift
end

gem 'rails', version
load 'rails'

、下から二行目のgem 'rails', versionでrails-【バージョン】/bin がライブラリ検索パスに追加されるので、bin以下の同名のコマンドが読み込まれて実行されるという寸法、なんだと思う。賢いですね。