rvmでgemの移行

今までruby187は、macデフォルトのp174を使用していましたが
去年クリスマスにruby187-p330/192-p136がリリースされたので
これを機に、ruby187もrvmにインストールしました。


インストール

rvmの更新
$ rvm update --head 
$ rvm reload
install
$ rvm install 1.8.7-p330 -C --with-readline-dir=$HOME/.rvm/usr
$ rvm install 1.9.2-p136 -C --with-readline-dir=$HOME/.rvm/usr

-headでもいいのかな。

gemの移行(まずは187)

gemset copy

manualを見てみるとcopy可能と書いてあるのでチャレンジ。
RVM: Ruby Version Manager - Copying gemsets.

# 187のgemは--user-installを使用して.gem以下に格納しているが
# GEM PATHの最初のパスがmacのデフォルトのところが指定されているため
# 明示的に変更。
$ export GEM_HOME=$HOME/.gem/ruby/1.8

# gemsetは未使用だけど、デフォルトで作成されるglobaへ移行してみる
$ rvm gemset copy system 1.8.7-p330@global

失敗。

gemset export/import

どうやら、export/importが用意されている模様なので試してみる。

$ rvm gemset export

お、成功。defaut.gems というファイルにgemの一覧が出力されているだけのようだ。

$ rvm use 1.8.7@global
$ rvm gemset import default.gems

で一応できた。

gemの移行(続いて192)

gemset copy
$ rvm gemset copy 1.9.2-p0 1.9.2-p136@global
Copying gemset from 1.9.2-p0 to 1.9.2@global
Making gemset for 1.9.2@global pristine.

お、いけた。


しかし、rvmrcにgemset(@global)を指定しないとダメな模様。

$ cat .rvmrc 
rvm 1.9.2@global

おまけ

patchlevelのバージョンアップでもgem入れ直しというのは結構きつい。
.rvm/gems へgemsetsが作成されるようだし、
もしかするとsymblic linkでもいけんじゃねーかなと思って試してみると
一応できた(細かい検証は行ってないけど)。
20110112追記。
できませんでした。
.rvm/gems/ruby-/bin の下の各ファイルの
shepangがrubyのフルパスが切られてました。
なので、おとなしくexp/imp しといた方が無難です。
(ちなみに私は、symbolic linkじゃなく、mvしちゃったので、bin以下を置換して動かしてます。非推奨。)

$ cd .rvm/gems
$ mv ruby-1.9.2-p136@global/ ruby-1.9.2-p136@global_bk
$ ln -s ruby-1.9.2-p0/ ruby-1.9.2-p136@global

gemsetの管理単位が、patchlevelまで含んじゃってるのが問題っぽいよね。
やっぱり、バージョン単位にして欲しいところ。


あと

デフォルトgemset無しの状態でも、@globalを適用して欲しい。
rvm use 1.9.2@global って面倒(aliasとかでやればいいんだけど)。


もしくは、デフォルトgemset無しじゃなく、@defaultとか@globalとかにして
自動で読み込んでくれるといいかな。


ここ見ると、interpreter毎の共通モノは、@globalへと書いているし、
デフォルト@globalかなぁ。ついつい@global忘れてinstallしてしまいそう。
RVM: Ruby Version Manager - Global gemsets


追記

install時に -C --with-readline-dir=$HOME/.rvm/usr を付け忘れてたので追記。