自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

February 21, 2010 [長年日記]

[Ruby] rvmを試す (インストール編)

twitter経由で。各種バージョンのRubyを一つの環境上にインストールしてスイッチして使うことができるツール、とのこと。バージョン間での挙動の違いにはいつも苦しめられているのでもしかしたらRubyアプリ/ライブラリ開発の救世主に!?

ということで、さっそく試してみることにした。以下、Fedoraの場合ね。

まずはこの辺を見ながらインストール。

% sudo gem install rvm
% rvm-install

bashなら.bash_profileに、zshなら.zshrcに以下を追記する。

if [[ -s /home/mutoh/.rvm/scripts/rvm ]] ; then source /home/mutoh/.rvm/scripts/rvm ; fi

shellを閉じて、新しいshellを起動する、と書いてあるので、とりあえず、同じコンソール上でzshを再起動。

% zsh
% env
  :
  :
rvm_path=/home/mutoh/.rvm
rvm_rubies_path=/home/mutoh/.rvm/rubies
rvm_scripts_path=/home/mutoh/.rvm/scripts
rvm_archives_path=/home/mutoh/.rvm/archives
rvm_src_path=/home/mutoh/.rvm/src
rvm_log_path=/home/mutoh/.rvm/log
rvm_bin_path=/home/mutoh/.rvm/bin
rvm_gems_path=/home/mutoh/.rvm/gems
rvm_config_path=/home/mutoh/.rvm/config
rvm_tmp_path=/home/mutoh/.rvm/tmp
rvm_hooks_path=/home/mutoh/.rvm/hooks
rvm_version=0.1.16

何やらいろいろとrvm関連の初期値が指定されている。

で、rvm向けに各バージョンのrubyを取得。curlが必要なのでインストールされていない場合はインストールしておく。
各バージョンのrubyをダウンロード+コンパイルし、rubygemsやrakeをインストールしている模様。結構時間かかる。

% rvm install 1.8.6,1.8.7,1.9.1,1.9.2
(以下、ログはピックアップね。)
Installation of ruby-1.8.6-p399 is complete.
Installation of rubygems ruby-1.8.6-p399 completed successfully.
Installing rake
Installing ruby-1.8.7-p249
Installation of ruby-1.8.7-p249 is complete.
Installation of rubygems ruby-1.8.7-p249 completed successfully.
Installing rake
Installation of ruby-1.9.1-p378 is complete.
Updating rubygems for ruby-1.9.1-p378
Installing rake
Error running '/home/mutoh/.rvm/rubies/ruby-1.9.1-p378/bin/gem install rake ', please check /home/mutoh/.rvm/log/ruby-1.9.1-p378/gems.install*.log
Installation of ruby-1.9.2-preview1 is complete.
Updating rubygems for ruby-1.9.2-preview1
Installing rake
Error running '/home/mutoh/.rvm/rubies/ruby-1.9.2-preview1/bin/gem install rake ', please check /home/mutoh/.rvm/log/ruby-1.9.2-preview1/gems.install*.log

大体うまく行ってるけど、1.9.1, 1.9.2-preview1のgem install rakeがこけたらしい。ログを見るとどちらも以下のエラーが。

    Permission denied - /home/mutoh/.ri/cache/.doc_dirs

とりあえず内容を見てみる。

% ls /home/mutoh/.ri/cache/
-rw-r--r-- 1 root root    1188 2010-02-21 23:46 .doc_dirs
-rw-r--r-- 1 root root 1830076 2010-02-21 23:46 classes

結論からすると、この2つのディレクトリはrootしか書き込み権限がないとまずいらしい。
とりあえず、sudo chmod -R a+w /home/mutoh/.ri/cacheして個別に実行しておく。

% sudo chmod -R a+w /home/mutoh/.ri/cache
% /home/mutoh/.rvm/rubies/ruby-1.9.1-p378/bin/gem install rake
% /home/mutoh/.rvm/rubies/ruby-1.9.2-preview1/bin/gem install rake

以上で無事にインストールできた模様。

[Ruby] rvmを試す(実行編)

さて、まずは、どんなバージョンが入ったのか確認してみる。

% rvm list
 
rvm Rubies
   ruby-1.8.6-p399 [ x86_64 ]
   ruby-1.8.7-p249 [ x86_64 ]
   ruby-1.9.1-p378 [ x86_64 ]
   ruby-1.9.2-preview1 [ x86_64 ]
 
System Ruby
 
   system [ x86_64 ]

rvm versionでそれぞれのrubyへスイッチできる。すごい。

% ruby -v
ruby 1.8.6 (2009-08-04 patchlevel 383) [x86_64-linux]
% rvm 1.9.1
% ruby -v
ruby 1.9.1p378 (2010-01-10 revision 26273) [x86_64-linux]
% rvm 1.8.7
% ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [x86_64-linux]
% rvm 1.9.2
% ruby -v
ruby 1.9.2dev (2009-07-18 trunk 24186) [x86_64-linux]
% rvm list
 
rvm Rubies
 
   ruby-1.8.6-p399 [ x86_64 ]
   ruby-1.8.7-p249 [ x86_64 ]
   ruby-1.9.1-p378 [ x86_64 ]
=> ruby-1.9.2-preview1 [ x86_64 ]
 
System Ruby
 
   system [ x86_64 ]

カレントのrubyが=>で分かるようになっている。

[Ruby] rvmを試す(追加でjrubyをインストール編)

jrubyも追加しておこう。

% rvm install jruby

こちらはコンパイルなし。

% rvm list
 
rvm Rubies
 
   jruby-1.4.0 [ [amd64-java] ]
   ruby-1.8.6-p399 [ x86_64 ]
   ruby-1.8.7-p249 [ x86_64 ]
   ruby-1.9.1-p378 [ x86_64 ]
=> ruby-1.9.2-preview1 [ x86_64 ]
 
System Ruby
 
   system [ x86_64 ]
% rvm jruby
% ruby -v
jruby 1.4.0 (ruby 1.8.7 patchlevel 174) (2009-11-02 69fbfa3) (OpenJDK 64-Bit Server VM 1.6.0_0) [amd64-java]

いいね!

そういえば、環境変数はどうなってるんだろう。

rvm_path=/home/mutoh/.rvm
rvm_rubies_path=/home/mutoh/.rvm/rubies
rvm_scripts_path=/home/mutoh/.rvm/scripts
rvm_archives_path=/home/mutoh/.rvm/archives
rvm_src_path=/home/mutoh/.rvm/src
rvm_log_path=/home/mutoh/.rvm/log
rvm_bin_path=/home/mutoh/.rvm/bin
rvm_gems_path=/home/mutoh/.rvm/gems
rvm_config_path=/home/mutoh/.rvm/config
rvm_tmp_path=/home/mutoh/.rvm/tmp
rvm_hooks_path=/home/mutoh/.rvm/hooks
rvm_version=0.1.16
rvm_interactive=1
install_flag=1
GEM_HOME=/home/mutoh/.rvm/gems/jruby-1.4.0
GEM_PATH=/home/mutoh/.rvm/gems/jruby-1.4.0:/home/mutoh/.rvm/gems/jruby-1.4.0%global
BUNDLE_PATH=/home/mutoh/.rvm/gems/jruby-1.4.0
MY_RUBY_HOME=/home/mutoh/.rvm/rubies/jruby-1.4.0
RUBY_VERSION=jruby-1.4.0
IRBRC=/home/mutoh/.rvm/rubies/jruby-1.4.0/.irbrc
rvm_ruby_gem_path=/home/mutoh/.rvm/gems/jruby-1.4.0:/home/mutoh/.rvm/gems/jruby-1.4.0%global
rvm_ruby_gem_home=/home/mutoh/.rvm/gems/jruby-1.4.0
rvm_ruby_interpreter=jruby
rvm_ruby_version=1.4.0
rvm_ruby_package_name=jruby-1.4.0
rvm_url=http://jruby.kenai.com/downloads/1.4.0/jruby-bin-1.4.0.tar.gz
rvm_major_version=4
rvm_minor_version=0
rvm_ruby_binary=/home/mutoh/.rvm/rubies/jruby-1.4.0/bin/ruby
rvm_ruby_home=/home/mutoh/.rvm/rubies/jruby-1.4.0
rvm_ruby_log_path=/home/mutoh/.rvm/log/jruby-1.4.0
rvm_ruby_src_path=/home/mutoh/.rvm/src/jruby-1.4.0
rvm_ruby_irbrc=/home/mutoh/.rvm/rubies/jruby-1.4.0/.irbrc
rvm_ruby_selected_flag=1
rvm_ruby_string=jruby-1.4.0

長い。こうやって切り替えをしてるのね。改めてみると他愛もないことのような気もするけど、そこはコロンブスの卵。インストールやVMの切り替えなどをここまでシンプルに手順化/自動化してくれたのはすごい。きっと重宝するに違いない。感謝。

[Ruby] rvmを試す(defaultのVMの設定編)

新しいターミナル/シェルを起動した際のデフォルトのVMを--defaultを使って決めることができる。

% rvm 1.9.1 --default
% ruby -v
ruby 1.9.1p378 (2010-01-10 revision 26273) [x86_64-linux]
% rvm system (元々入っているRubyにスイッチ)
% ruby -v
ruby 1.8.6 (2009-08-04 patchlevel 383) [x86_64-linux]
% zsh (新しいshellを起動)
% ruby -v
ruby 1.9.1p378 (2010-01-10 revision 26273) [x86_64-linux]


February 22, 2010 [長年日記]

[Ruby] rvmを試す(gemをインストール)

各環境にgemをインストールする。

% rvm gem install allison --no-rdoc

おぉ。簡単だ。ちなみに、rdocは各環境に不要なので--no-rdocオプションをつけた。

[Ruby] rvmを試す(テスト)

rvmを使いたいもっとも大きな動機はいろいろなVMで自分の開発したライブラリのテストを実行すること。

とりあえず、localeを例に試してみよう。

% cd git/locale  (Ruby-Localeのgithubのディレクトリと思ってください)
% rvm rake test

お、いい感じ…、ってテストでエラーでてるやんけっ!!(汗)


February 24, 2010 [長年日記]

[Ruby] String#to_fの挙動

げっ。1.8.6だけ挙動が違うのか…。昔は動いていたような気がするのだが…。

#って、もう、1.8.6系ってサポート外にしても良いかなー。

% rvm ruby -e 'p "0.7".to_f'
 
jruby-1.4.0: jruby 1.4.0 (ruby 1.8.7 patchlevel 174) (2009-11-02 69fbfa3) (OpenJDK 64-Bit Server VM 1.6.0_0) [amd64-java] 
 
0.7
 
ruby-1.8.6-p399: ruby 1.8.6 (2010-02-05 patchlevel 399) [x86_64-linux] 
 
7.0
 
ruby-1.8.7-p249: ruby 1.8.7 (2010-01-10 patchlevel 249) [x86_64-linux] 
 
0.7
 
ruby-1.9.1-p378: ruby 1.9.1p378 (2010-01-10 revision 26273) [x86_64-linux] 
 
0.7
 
ruby-1.9.2-preview1: ruby 1.9.2dev (2009-07-18 trunk 24186) [x86_64-linux] 
 
0.7

しかしバージョン間の違いをいとも簡単に見比べることができるのは楽しいね。

[Ruby] String#to_fの挙動(2)

ruby-1.8.6-p399の問題か?

% rvm system
% ruby -v -e 'p "0.7".to_f'
ruby 1.8.6 (2009-08-04 patchlevel 383) [x86_64-linux]
0.7

[Ruby] rvmで利用可能なVMの一覧を取得する。

1.8.6で利用可能なのはp399だけなのかな。

% rvm list --all
  :
  :
(ruby-)1.8.6(-p383)
(ruby-)1.8.6-head
  :
  :

1.8.6-headというのが最新なのかな。じゃ、これをインストールしてみよう。

% rvm install 1.8.6-head
% rvm list
 
rvm Rubies
 
   jruby-1.4.0 [ [amd64-java] ]
   ruby-1.8.6-head [ x86_64 ]
   ruby-1.8.6-p399 [ x86_64 ]
   ruby-1.8.7-p249 [ x86_64 ]

同じバージョンでも複数のパッチレベルを試せるのね。素敵。

[Ruby] String#to_fの挙動(3)

ruby-1.8.6-headで再度試す。

% rvm 1.8.6-head
% ruby -v -e 'p "0.7".to_f'
ruby 1.8.6 (2010-02-05 patchlevel 399) [x86_64-linux]
7.0

がくっ。そうか、ヘッドとは現在の最新のパッチレベルだから今回は同じ399だったってことか…。
ひとまず見なかったことにして今日は寝るとしよう(^^;)。


February 25, 2010 [長年日記]

[Ruby] String#to_fの挙動 on Ruby-1.8.6

http://redmine.ruby-lang.orgに報告してみた。始めてredmine使ったけど大丈夫かな…(汗)。