Rails と Java EE の連携- 生の Rails を GlassFish v3 に配備Posted by arungupta on April 14, 2008 at 08:18 AM | Comments (0) 本ブログ3回連続シリーズ(Part 1 、 Part 2)・最終回の今回は、 Goldspike や Warbler 、あるいはその他特別な gem やプラグインなどを一切使わず、Rails アプリケーションを GlassFish v3 上に配備する方法をご紹介します。 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"のようにパラメータを渡すと、次のように表示が変わりますね: Cannot resolve external resource into attachment. このように、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"にアクセスしてみましょう。次のような画面が表示されましたか?: Cannot resolve external resource into attachment. このブログエントリでは、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 上へのネイティブな配備 日本語翻訳: Kana |