From: Emosei <emosei / ow-japan.com>
Subject: [ruby-list:45035] rubyバイナリの共存に関して
Date: Fri, 13 Jun 2008 01:28:43 +0900

るびきちです。

> 他にも、コンパイルオプションで、 --program-suffixを指定するなど、
> 調べると色々な方法があるようです。
> 
> 皆さんが共存させる時にはどのようにしていますか?

--program-suffixを指定しています。
僕の場合はさらに--prefixを指定して、/pkgsディレクトリ以下にインストールしています。
/pkgsにはいろいろなプログラムをインストールしています。
こうしておかないと古いRubyを使おうと思ってもライブラリが新しいのに上書き
されてしまいます。

そして、

cd /usr/local/bin; ln -s /pkgs/ruby18/bin/ruby ruby18
のようにシンボリックリンクを張っています。


# ruby-1.8.7-p17
./configure  --prefix=/pkgs/ruby-1.8.7-p17 --program-suffix=187p17
# stable snapshot
./configure  --prefix=/pkgs/ruby18 --program-suffix=18

ただ、site_rubyやgemsディレクトリも別個になってしまうので
cd /pkgs/ruby18/lib/ruby
rm -rf gems site_ruby
ln -s /usr/local/lib/ruby/site_ruby/
ln -s /usr/local/lib/ruby/gems/

もやっています。今なら
ln -s /usr/local/lib/ruby/vendor_ruby/
も必要でしょうか。

configureオプションに --with-sitedir や --with-vendordir があるのに、
--with-gemdir がないのが不便です。あればいいのに…

> 目的は、irb等でバージョンを切り替えながら
> 動作確認しながら、主として使用するバージョンを
> 適宜切り替えいきたいと考えています。

この目的にはrcodetoolsに含まれているxmpfilterをどうぞ。

RUBY_VERSION                    # => "1.8.7"
[].tap {|a| a[0] = 9 }          # => [9]

vs

RUBY_VERSION                    # => "1.8.6"
[].tap {|a| a[0] = 9 }          # => 
# ~> -:2: undefined method `tap' for []:Array (NoMethodError)

--
rubikitch
Blog: http://d.hatena.ne.jp/rubikitch/
Site: http://www.rubyist.net/~rubikitch/