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

November 09, 2007 [おもひで]

[Ruby] JRubyのインストールと環境設定 Linux編

JRubyをLinuxにインストールする場合、どうするとよいのだろう。

とりあえず、自分の環境を晒してみる。

まずは、インストール先。/opt/配下にしようかと思ったんだけど、JDKが/usr/java/配下にあるので、それにならって、/usr/java/配下に置くことにした。

こんな感じ。

lrwxrwxrwx 1 root  root    16 2007-07-07 09:00 default -< /usr/java/latest/
drwxr-xr-x 9 root  root  4096 2007-07-07 09:00 jdk1.6.0_02/
lrwxrwxrwx 1 root  root    11 2007-10-25 23:26 jruby -< jruby-1.0.1/
drwxr-xr-x 6 root  root  4096 2007-10-25 23:25 jruby-1.0.1/
lrwxrwxrwx 1 root  root    21 2007-07-07 09:00 latest -< /usr/java/jdk1.6.0_02/

/usr/jara/jrubyはjruby-1.0.1のシンボリックリンクにしておく。

ruby-1.8.6もそのまま使うので、PATH環境変数は使わずに、$HOME/.aliasに以下のようなエイリアスを記述する。

alias jruby='/usr/java/jruby/bin/jruby'
alias jirb='/usr/java/jruby/bin/jruby /usr/java/jruby/bin/jirb'
alias jgem='/usr/java/jruby/bin/jruby /usr/java/jruby/bin/gem'
alias jrake='/usr/java/jruby/bin/jruby /usr/java/jruby/bin/rake'

これで、通常のrubyと共存ができる。こんな感じ。

$ jruby -v
ruby 1.8.5 (2007-08-23 rev 4201) [i386-jruby1.0.1]
$ jirb
$ jgem install gettext
$ jrake updatepo

こんな感じでどうだろ。もっと簡単に使う方法ある?

[Ruby] JRuby with Ruby-GetText-Package

大体は動くんだけど、テストが一部通らねー。

でも、これってJRubyのバグだよね。Matz Rubyでは動くんだし・・・。

Railsは大体動くみたいだし、ヨシとすっかなー。(弱気)

[Ruby] JRubyでyieldとbreakのネスト

テストが通らない理由が分かった。単純化すると以下のようなコードの挙動がRubyとJRubyで違うからだ。

def each_test
  [:a, :b, :c].each {|key|
    [1,2,3].each {|i|
      yield  i
    }
  }
end
 
each_test {|i|
  print i
  break if i == 2
}
puts

んで、実行結果。

% ruby -v test.rb
ruby 1.8.6 (2007-03-13 patchlevel 0) [x86_64-linux]
12
% jruby -v test.rb
ruby 1.8.5 (2007-11-01 rev 4810) [i386-jruby1.0.2]
121212

JRubyだと、1回のbreakでは一番外まで抜け出せないようだ。 不具合レポートも出ている模様

結局のところはJRubyを直してもらわないとダメなんだけど、うまい回避策ないかなぁ。

本日のツッコミ(全2件) [ツッコミを入れる]
takai (November 09, 2007 23:05)

$ jruby -S rake
とかが便利ですよ

むとう (November 10, 2007 00:30)

おぉ。そんな技が。ありがとうございます!


編集