Railsアプリのコンパイルに挑戦中。Linux(CentOS4.5)でやってます。
JRuby.orgから、JRuby 1.1bをダウンロード。
解凍してパスをきる。
export JRUBY_HOME=/usr/java/jruby-1.1b1
export PATH=$PATH:$JRUBY_HOME/bin
> jruby -v
ruby 1.8.5 (2007-11-01 rev 4842) [i386-jruby1.1b1]
まずは適当なrubyコードを書いて実行。
■animal.rb
class Animal
def bark
p 'Wooo'
end
end
■cat.rb
require 'animal'
class Cat < Animal
def bark
p 'Myaa'
end
end
■world.rb
require 'animal'
require 'cat'
Animal.new.bark
Cat.new.bark
> jruby world.rb
'Wooo'
'Myaa'
Javaバイトコードにコンパイル
> jrubyc *.rb
> mkdir classes
> mv *.class ./classes/
> export CLASSPATH=./classes
ここでは、classesフォルダを作って、バイトコードをそこに格納してCLASSPATHを切ってます。
Javaで実行してみると、
> java -cp $JRUBY_HOME/lib/jruby.jar:$CLASSPATH world
'Wooo'
'Myaa'
もうちょっと弄ってみる
コンパイル済みのclassがあれば、ソースファイル(*.rb)は消してもいいはず。逆に、classがない場合は、ソースを探しに行って欲しい。
ということをテストする。
cat.rbを削除して、jruby world.rb。
animal.classを削除して、jruby world.rb。
コンパイル後にソースを改変して、。
など。
jrubyでは、requireはバイトコードがなければソースを探すようだ。
いよいよRailsアプリをコンパイルしてみる
jrubyにrailsをインストール。
> jruby -S gem install rails -y
> jruby -S gem install activerecord-jdbc
> jruby -S rails testapp
とりあえず、適当にscaffoldしたコードを、コンパイルしてみると、
> cd testapp
> jruby -S rake db:migrate
> jruby script/generate scaffold user user
> jrubyc ./app/**/*.rb
おおっ、成功する。
> jruby script/server
も無事起動。いつものscaffoldアプリも動く。
これでコンパイル済みの *.rb を削除しても動けば、最高!
・・と思いきや、削除すると、クラス見つかりませんエラー。
CLASSPATHか、Railsのクラスロードの仕組みか、なにかほんのちょっとの問題のような気がする。・・・というところで、今日は力尽きる。
JRuby1.1bは、かなり良く動く。という印象です。
情報筋では、JRuby1.1正式リリースではRails本体のコンパイルもターゲットとのこと。自分で検証するまでもなく、待てばいいのかも。
(もっと早く言え、ko!・・うそ、ありがとう)。