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インストール日記みたいになってきてる……。