Railsアプリをコンパイルしたい

2007/12/09 |jRuby |comments(0)

JRuby1.1bでRuby→Javaコンパイルやってみました。Railsアプリのコンパイルを目指したのだが・・・

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!・・うそ、ありがとう)。


コメント

コメントしてください
お名前:
入力しなければ「匿名さん」。20字以内。

メール:
入力しても表示しません

URL:
入力すればリンクが貼れます


コメント: