JRubyで遊ぼう(2) JRuby on Rails を Tomcat+Apacheで

今回は、JRubyrailsを設置し、さらにApacheと連携したTomcatで運用する方法を紹介します。

なお、今回動作を確認したのは、以下の環境です。

JRuby on Rails

JRubyでも簡単にrailsを扱えます。まず、以下のコマンドでrailsをインストールします。

$ jruby -S gem install rails

これで普通のrubyと同じようにrailsコマンドが使えるようになります。railsするときは、

$ jruby -S rails project_name

これでいける。-Sがポイント。

JRubyでrails開発をおこなう利点のひとつとして、JDBCによるデータベース運用が可能なことがあげられますが、今回は省略します。

Tomcatにdeployする

JRuby on Railsで作られたアプリケーションはJava VM上で動作するので、JSP/Servletアプリケーションのように、Tomcatを用いて運用することが出来ます。
railsのpluginとして公開されているgoldspikeを用いることで、railsプロジェクトをwarファイルに出力できるので、それをTomcatにdeployします。

goldspikeをインストールするには、以下のようにします。

$ jruby script\plugin install http://jruby-extras.rubyforge.org/svn/trunk/rails-integration/plugins/goldspike

goldspikeを用いてプロジェクトをwarファイルにしたいときは、以下のようにします。

$ jruby -S rake war:standalone:create

このrakeで、warが生成されます。このrakeの裏ではmaven2が走り、必要なjarを自動的に収集しにいっています。
私はここでハマったのですが、この記事を執筆した当時(2007/9/24)では、デフォルトのmaven2リポジトリからうまくjarが持ってこられずに、エラーを吐いてrakeが失敗してしまいました。
そこで、プロジェクトディレクトリの中の、vender/plugins/goldspike/lib/war_config.rbを編集します。

85c85
<       @maven_remote_repository = 'http://repo1.maven.org/maven2/'
---
>       @maven_remote_repository = 'http://www.ibiblio.org/maven2'
95c95
<       add_library(maven_library('org.jruby', 'jruby-complete', '1.0.1'))
---
>       add_library(maven_library('org.jruby', 'jruby-complete', '0.9.8'))

ここでは、maven2のセントラルリポジトリを参照するように変更しています。
jrubyのバージョンを0.9.8に落としているのは、執筆当時、セントラルリポジトリに置いてあるjrubyの最新版が、0.9.8だったためです。
ちなみに、0.9.8だと、Tomcatでうまく動かないので、かならず1.0以降のjarに置き換えるようにしてください。
WEB-INF/libの中にjruby-complete-1.0.1.jarを置いておけば、それがそのまま使われます。


生成されたproject_name.warをTomcatのwebappsに置き、

http://localhost:8080/project_name

でアクセスできれば成功です。

Apacheとの連携

面倒なので、mod_jkを使わずに、お手軽な方法でApacheをTomcatと連携します。
httpd.confに、以下の行を追加します。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
<Location /project_name >
	ProxyPass ajp://localhost:8009/project_name
</Location>

これだけでOKのはずです。

http://localhost/project_name

このURLにアクセスして、動作が確認できればOKです。