[Ubuntu][JRuby][Rails][MySQL][BackgrounDRb] インストールメモ
現在のプロジェクトのRailsアプリから,Javaでしか安定して利用できなさそうな機能を使うことになったので,まず手元のUbuntuマシンにJRubyインストールしてみた.というメモです.
Javaのバージョンを確認して
$ java -version java version "1.6.0"
JRubyのサイトからファイルをダウンロード
$ wget http://dist.codehaus.org/jruby/jruby-bin-1.0.1.tar.gz $ tar zxf jruby-bin-1.0.1.tar.gz
して,サンプルが動くことを確認
$ cd jruby-1.0.1 $ ./bin/jruby samples/javascript.rb # JavaScriptのJava上でのeval via JRuby Hello, multilanguage world
したら,適当なディレクトリに放りこみ,
$ cd .. $ sudo mv jruby-1.0.1 /usr/local/share/ $ sudo chown -R root:root /usr/local/share/jruby-1.0.1
.bashrc/.zshrcなどで環境変数をセットすると
export $JRUBY_HOME=/usr/local/share/jruby-1.0.1 export PATH=$PATH:$JRUBY_HOME/bin
jrubyコマンドが使えるようになる.
$ jruby -version ruby 1.8.5 (2007-08-23 rev 4201) [i386-jruby1.0.1]
gemパッケージのインストール
試しにrakeをインストール.
$ sudo $JRUBY_HOME/bin/jruby -S gem install rake
このとき下のようにメモリがたりなくなる場合は
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
$ sudo $JRUBY_HOME/bin/jruby -J-Xmx512m -S gem install rake
うまくいったらrailsをインストール.
$ sudo $JRUBY_HOME/bin/jruby -S gem install rails -y --no-ri --no-rdoc
以下は今のrailsプロジェクトで使ってるパッケージのインストール
$ sudo $JRUBY_HOME/bin/jruby -S gem install acts_as_searchable $ sudo $JRUBY_HOME/bin/jruby -S gem install has_many_polymorphs
JRubyでMySQLを使えるようにする
MySQLのJDBCドライバはMySQL :: Download Connector/JにあるけどUbuntuのパッケージにlibmysql-javaとしてあったのでインストールし,
$ sudo apt-get install libmysql-java $ ls /usr/share/java/mysql.jar # mysql.jarのインストール場所確認
クラスパスの設定を.bashrc/.zshrcなどに追加.
export CLASSPATH=$CLASSPATH:/usr/share/java/mysql.jar
=begin 2008-03-23修正
ActiveRecord-JDBCをインストール
$ sudo $JRUBY_HOME/bin/jruby -S gem install ActiveRecord-JDBC
$ jirb irb(main):001:0> require 'rubygems' => true irb(main):002:0> gem 'ActiveRecord-JDBC' => true irb(main):003:0> require 'jdbc_adapter' => true irb(main):004:0> require 'active_record' => true
サーバ移転時に上記と同じことをするとこちらの記事と同じ問題が発生.
記事に書いてある通りActiveRecord-JDBCをgemからアンインストールし,ActiveRecord-JDBCよりも新しいモジュールであるactiverecord-jdbc-adapterをgemでインストールすると問題なく動いた.
=end 2008-03-23修正
database.ymlのアダプタをJRubyの場合はJDBCを使うように変更
development: <% if RUBY_PLATFORM =~ /java/ %> adapter: jdbc driver: com.mysql.jdbc.Driver url: jdbc:mysql://localhost/myapp_development # myapp はプロジェクト名 <% else %> adapter: mysql database: myapp_development # myapp はプロジェクト名 encoding: utf8 <% end %> # ... ユーザ名,パスワードなどの設定 # ... # ... test:, production: も同様に # ...
=begin 2008-03-23修正
したら,environment.rbの`Rails::Initializer.run do ...`より前に下のコードを追加し,
require 'rubygems' gem 'ActiveRecord-JDBC' require 'jdbc_adapter' require 'active_record'
=end 2008-03-23修正
試しにrakeのマイグレーションタスクを実行するとパーミッションで怒られたので
$JRUBY_HOME/bin/rake db:migrate zsh: permission denied: /usr/local/share/jruby-1.0.1//bin/rake
セットし直すとうまく通った.
$ sudo chmod a+r $JRUBY_HOME/bin/* $JRUBY_HOME/bin/rake db:migrate
最後にWebrickサーバも起動してみる.
$ jruby script/server
gettextが動かない
gettextのgemをJRubyにインストールしようとしたけど,JRuby版が見付からず,無理だった.
$ sudo su - # jruby -S gem install gettext 1. gettext 1.10.0 (mswin32) 2. gettext 1.10.0 (ruby) 3. gettext 1.9.0 (mswin32) 4. gettext 1.9.0 (ruby) ... > 2 Building native extensions. This could take a while... Error opening script file: extconf.rb (No such file or directory) ERROR: While executing gem ... (Gem::Installer::ExtensionBuildError) ERROR: Failed to build gem native extension.
gettext用のコードがそこらじゅうにあるので,都合が悪い.
とりあえずはJavaの機能が必要な部分だけJRuby上でdRubyサーバ化した上で,
メインのWebサーバプロセスはCRubyで動かすなどすればよさそう.
BackgrounDRbがJRubyで動いてくれれば楽そうだけど,まだ怪しい(参考URL).
-- 追記 --> JRUBY-1290でbugfixされたらしく,最新のJRubyのソースからコンパイルしたものを使うと,無事にBackgrounDRbのサーバをJRubyで動かすことができた.
参考: