SinatraをServletEngine上で実行
Ruby の Web アプリケーション用 DSL である Sinatra を Java の ServletEngine 上で実行してみます。
Warbler を使えば、容易に war ファイル化できるので、それを配置するだけなのですが、今回は手動で作ってみました。
手順は以下の通りです。
なお、使用した環境は以下の通りです。
事前準備
まず、gem を使って Sinatra をインストールしておきます。
>gem install sinatra
次に、JRuby ダウンロードサイトから JRuby 1.5.0.RC2 Complete.jar をダウンロードします。(Complete.jar を使う点に注意)
最後に、JRuby-Rack サイトから jruby-rack-0.9.7.jar ファイルをダウンロードします。(gem install warbler で Warbler と共に JRuby-Rack をインストールする方法もある)
JAR ファイルの配置
適当なディレクトリに WEB-INF/lib ディレクトリを作成して事前準備でダウンロードした JAR ファイルを配置します。
gem の配置
WEB-INF/gems ディレクトリを作成して、rack-1.0.1 と sinatra-1.0 の gems を配置します。
Sinatra の DSL ファイル作成
Sinatra の DSL ファイルを作成します。今回は WEB-INF/testapp.rb として作成しました。(web.xml で指定するので作成場所やファイル名は何でもよい)
testapp.rb
require 'rubygems' require 'sinatra' get '/' do 'test page' end get '/:name/:value' do |n, v| "test page : #{n} - #{v}" end
- WEB-INF/testapp.rb
web.xml ファイル作成
WEB-INF/web.xml ファイルを以下のような内容で作成します。context-param の rackup の value で作成した DSL ファイル(testapp.rb)を require する点に注意。(.rb は不要)
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <context-param> <param-name>rackup</param-name> <!-- DSL ファイルを require する --> <param-value> require 'testapp' run Sinatra::Application </param-value> </context-param> <filter> <filter-name>RackFilter</filter-name> <filter-class>org.jruby.rack.RackFilter</filter-class> </filter> <filter-mapping> <filter-name>RackFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.jruby.rack.RackServletContextListener</listener-class> </listener> </web-app>
- WEB-INF/web.xml
ServletEngine への配置
最後に、作成した構成を war ファイル化して ServletEngine に配置すれば動作すると思います。
例えば、Apache Tomcat の webapps ディレクトリにそのまま配置して(例 testapp/WEB-INF)、http://localhost:8080/testapp/test/10 にアクセスすれば "test page : test - 10" と表示されます。