Posted by arungupta on April 14, 2008 at 08:18 AM | Comments (0)
本ブログ3回連続シリーズ(Part 1 、 Part 2)・最終回の今回は、 Goldspike
や Warbler
、あるいはその他特別な gem やプラグインなどを一切使わず、Rails アプリケーションを GlassFish v3 上に配備する方法をご紹介します。
GlassFish v3
は GlssFish v2 の後続バージョンで、 モジュール化、Java EE 以外のコンテナとの連携、そして組み込み機能の強化などに焦点を当てて開発が進められています。b09はここからダウンロードしてください
Rails powered by GlassFish
では、商用グレードのアプリケーションサーバ・ GlassFish に備わるリッチな機能が余すところなく紹介されています。
では、詳しい手順を紹介していきましょう:
1. JRuby 1.1 ( Rails もセットアップされていること) を使って次のように Rails アプリケーション "railsee3" を作成します:
~/testbed/jruby-1.1/samples/rails >../../bin/jruby -S rails railsee3
create
create app/controllers
create app/helpers
create app/models
. . .
create log/production.log
create log/development.log
create log/test.log
2. Serblet ディスクリプタを追加
1. Railsアプリケーションのルートディレクトリ内に "WEB-INF" ディレクトリを作成し、 以下の内容で "web.xml" を作成します:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>server.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
2. 続いて、 "WEB-INF" の中に以下の内容で "sun-web.xml" を作成してください:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software /appserver/dtds/sun-web-app_2_5-0.dtd"> <sun-web-app error-url=""> <context-root>/servlet</context-root> <class-loader delegate="true"/> </sun-web-app>
3. さらに "WEB-INF/lib" ディレクトリを新規に作成します。
3. サーブレットの作成とコピー
1. この記事の #5
を参考に Java サーブレットを含むライブラリを作成してください。
2. NetBeans プロジェクトの "dist" ディレクトリにある "HelloServlet.jar" を "WEB-INF/lib" ディレクトリにコピーしましょう。
4. GlassFish 上の JRuby-on-Rails を設定 - GlassFish ディレクトリ配下の "config/asenv.conf" を開き、ファイルの末尾に以下のように JRUBY_HOME の設定を追加してください。
JRUBY_HOME="/Users/arungupta/testbed/jruby-1.1"
5. 次のようにして Rails アプリケーションを配備します:
~/testbed/jruby-1.1/samples/rails >~/testbed/glassfish/v3/p2b9/glassfish/bin/asadmin deploy --force=true railsee3 railsee3 deployed successfully Command deploy executed successfully.
6. これで"http://localhost:8080/servlet/hello"というURLから、Railsに含めたサーブレットにアクセスできます。デフォルトでは、ブラウザに以下のように表示されます:
![]() |
URLに "http://localhost:8080/railsee3/hello?name=Arun"のようにパラメータを渡すと、次のように表示が変わりますね:
![]() |
このように、GlassFish v3 上に配備したRailsアプリケーションを Java EE のサーブレットと連携させることができました。
では続いて Rails アプリケーションにコントローラとビューを追加し、そこからこのサーブレットを呼び出して Rails との完全な連携を試してみましょう。
7. コントローラとビューは次のように作成します:
~/testbed/jruby-1.1/samples/rails/railsee3 >../../../bin/jruby script/generate controller home index
JRuby limited openssl loaded. gem install jruby-openssl for full support.
http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
exists app/controllers/
exists app/helpers/
create app/views/home
exists test/functional/
create app/controllers/home_controller.rb
create test/functional/home_controller_test.rb
create app/helpers/home_helper.rb
create app/views/home/index.html.erb
8. "app/controllers/home_controller.rb"に作成されたコントローラを次のように変更しましょう:
class HomeController < ApplicationController
include Java
def index
url = java.net.URL.new("http://localhost:8080/servlet/hello");
conn = url.open_connection;
reader = java.io.BufferedReader.new(java.io.InputStreamReader.new(conn.get_input_stream));
@servlet_output = "";
input_line = reader.read_line;
while input_line != nil
@servlet_output << input_line;
input_line = reader.read_line;
end
reader.close;
end
end
9. そして、"app/views/home/index.rhtml.erb"に作成されたビューを次のように変更します:
<h1>Home#index</h1> <p>Find me in app/views/home/index.html.erb</p> <%= @servlet_output %>
では、上記 # 5 に示す手順で Rails アプリケーションを再配備し、"http://localhost:8080/railsee3/home/index"にアクセスしてみましょう。次のような画面が表示されましたか?:
![]() |
このブログエントリでは、Warbler のような gem や Goldspike のようなプラグインを使うことなく、 GlassFish v3 上に Rails アプリケーションを配備する方法を解説しました。
Warblerを使ってJavaEE5のサーブレットとRailsアプリケーションをパッケージングし、GlassFish上に配備する手順について解説しました。完全にネイティブな配備です!
以上、この3回連続シリーズでは GlassFish 上への Rails アプリケーションの配備モデルについてお話してきました。いずれのモデルでも Java EE のサーブレットを Rails アプリケーションに同梱し、Rails のビューから呼び出す方法をご紹介しています。
Part 1 - Goldspikeを用いた GlassFish v2 UR1 上への配備(WARベース)
Part 2 - Warblerを用いた GlassFish v2 UR1 上への配備(WARベース)
Part 3 - gem やプラグインを使用しない、GlassFish v3 上へのネイティブな配備