Railsの異なるバージョンを共存させために複数のRubygemsを設定

Rails1.2時代の環境にもRails2.3を入れたくなったメモ。

基本的にRailsはバージョン指定してインストールして、Railsのenvironment.rbを書き換えれば対応するバージョンを読み込む。

しかしRails1〜2.1あたりの時代のRubygems(v1.2以前、v0.9.xとか?)は今のRails2.3.2(v1.3.1)には対応しない。
もし、共有の/usr/libなどを書き換えたくない時は/home/user以下に専用のGEM_HOMEを作ることによって、他のユーザーや既存のサービスなどとの競合を防ぐことができる。
あるいは、レンタルサーバーなどでも有効な方法なのかもしれません。


Rubygemsのtgzをダウンロードして解凍

$ wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz
$ tar zxf rubygems-1.3.1.tgz 
$ cd rubygems-1.3.1
$ ruby setup.rb -h
ruby setup.rb [options]:

RubyGems will install the gem command with a name matching ruby's
prefix and suffix.  If ruby was installed as `ruby18`, gem will be
installed as `gem18`.

By default, this RubyGems will install gem as:
  gem1.8

Options:
  --help                 Print this message
  --prefix=DIR           Prefix path for installing RubyGems
                         Will not affect gem repository location
  --no-format-executable Force installation as `gem`
  --no-rdoc              Don't build RDoc for RubyGems
  --no-ri                Don't build ri for RubyGems
  --vendor               Install into vendorlibdir not sitelibdir
                         (Requires Ruby 1.8.7)
  --destdir              Root directory to install rubygems into
                         Used mainly for packaging RubyGems


Optionsに--prefix=DIRを指定することでインストールパスを指定できる
ホーム以下のgemsディレクトリを指定して、そこにSetupする。

$ ruby setup.rb --prefix=~/gems


.bashrcに環境変数を設定する

$ cd ~/gems
$ vi ~/.bashrc
export GEM_HOME=~/gems
export RUBYLIB=~/gems/lib

再読み込み

$ source ~/.bashrc


これでGEM_HOMEとRUBYLIBが環境変数に設定されるようになる。手動でexportすることで複数のGEM_HOMEを切り替えることも可能。

パスを通してないので、明示的にいま新しくインストールしたgemコマンドでRailsをインストールする

$ ~/gems/bin/gem1.8 install rails

これで、既存の/usr/libや/var/libなどに影響を与えず、指定したGEM_HOME以下に新しくインストールされるので、好き勝手にgemをいじることが出来る。
railsやrakeなどGem経由でインストールしたコマンド類も$GEM_HOME/binにおかれる。


また、昔のバージョンのRailsもバージョン指定してインストールすれば古いバージョンで作ったRailsアプリも動くようになる。

$ ~/gems/bin/gem1.8 install rails -v 1.2.6

以前使ってたGEM_HOMEは使われないので、その他必要なGEMがあれば手動で全部いれていけば同じ環境は作れる。
あるいは古いGEM_HOMEを環境変数にセットして、その上でscript/server等で動かすこともできた。

$ rails _1.2.6_ 

とすることで、古いRailsプロジェクトを作成することも可能らしいが、今回は既存のものを動かしたかっただけなので、新規作成までは試してないっす。



最近Railsインストール日記みたいになってきてる……。