2009-08-12
■ [Java][JRuby] Sinatra on GAE/J

Rubyで書かれた軽量Webアプリケーション開発フレームワーク「Sinatra」をGoogle App Engine for Java上でJRubyを使って動かすための、自分用のメモだよ。基本的にはjugyoさんのこちらのエントリの通りだよ。ここでの手順はWindowsで行うことを想定しているよ。
- Google App Engine for Java SDKのダウンロードと展開
- http://code.google.com/p/googleappengine/downloads/list
- 「appengine-java-sdk-1.2.2.zip」をダウンロードして、Cドライブ直下に展開してね
- sinatra_on_gaeディレクトリの作成
- コマンドプロンプトを起動して、次のようにコマンドを入力してね
- 空白を含むパス上だとうまく動かないみたいなので、ここではCドライブ直下に作成しているよ
> cd \ > mkdir sinatra_on_gae
- jruby-complete-1.3.1.jarの設置
- http://dist.codehaus.org/jruby/1.3.1/
- 「jruby-complete-1.3.1.jar」をクリックしてダウンロードして、C:\sinatra_on_gaeフォルダに配置してね
- アプリケーションのフォルダの作成
> cd \sinatra_on_gae > mkdir WEB-INF > mkdir WEB-INF\gems > mkdir WEB-INF\lib
- Sinatraのインストール
> set JAVA_HOME=C:\PROGRA~1\Java\jdk1.6.0_16 > set PATH=%JAVA_HOME%\bin;C:\appengine-java-sdk-1.2.2\bin;%PATH% > java -jar jruby-complete-1.3.1.jar -S gem install -i WEB-INF\gems sinatra --no-ri --no-rdoc > rmdir /s /q WEB-INF\gems\bin > del /q WEB-INF\gems\cache\*
- jruby-core.jarとruby-stdlib.jarをlibフォルダに作成
> mkdir tmp_unpack > cd tmp_unpack > jar xf ../jruby-complete-1.3.1.jar > cd .. > mkdir jruby-core > move tmp_unpack\org jruby-core > move tmp_unpack\com jruby-core > move tmp_unpack\jline jruby-core > move tmp_unpack\jay jruby-core > move tmp_unpack\jruby jruby-core > cd jruby-core > jar cf ../jruby-core.jar . > cd ..\tmp_unpack > jar cf ../ruby-stdlib.jar . > cd .. > rmdir /s /q jruby-core > rmdir /s /q tmp_unpack > move jruby-core.jar WEB-INF\lib > move ruby-stdlib.jar WEB-INF\lib > del jruby-complete-1.3.1.jar
- appengine-api-1.0-sdk-1.2.2.jarのコピー
> copy C:\appengine-java-sdk-1.2.2\lib\user\appengine-api-1.0-sdk-1.2.2.jar WEB-INF\lib
- jruby-rack-0.9.4.jarのダウンロードと配置
- http://kenai.com/projects/jruby-rack/pages/Home
- 「jruby-rack-0.9.4.jar」をダウンロードして、C:\sinatra_on_gae\WEB-INF\libに配置してね
- WEB-INF/app.rbの作成
- 単に「Hello World!!」と表示させるだけのアプリケーションだよ。
require 'rubygems' require 'sinatra' get '/' do 'Hello World!!' end
- WEB-INF/appengine-web.xmlの作成
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>sinatra_on_gae</application>
<version>1</version>
<static-files />
<resource-files />
<sessions-enabled>false</sessions-enabled>
<system-properties>
<property name="jruby.management.enabled" value="false" />
<property name="os.arch" value="" />
<property name="jruby.compile.mode" value="JIT"/> <!-- JIT|FORCE|OFF -->
<property name="jruby.compile.fastest" value="true"/>
<property name="jruby.compile.frameless" value="true"/>
<property name="jruby.compile.positionless" value="true"/>
<property name="jruby.compile.threadless" value="false"/>
<property name="jruby.compile.fastops" value="false"/>
<property name="jruby.compile.fastcase" value="false"/>
<property name="jruby.compile.chainsize" value="500"/>
<property name="jruby.compile.lazyHandles" value="false"/>
<property name="jruby.compile.peephole" value="true"/>
</system-properties>
</appengine-web-app>
- 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>
<context-param>
<param-name>public.root</param-name>
<param-value>/</param-value>
</context-param>
<context-param>
<param-name>rackup</param-name>
<param-value>require 'rubygems'
require 'sinatra'
root_dir = File.dirname(__FILE__)
#set :environment, :production
set :environment, :development
set :root, root_dir
set :app_file, File.join(root_dir, 'app.rb')
disable :run
require 'app'
run Sinatra::Application
</param-value>
</context-param>
<context-param>
<param-name>jruby.min.runtimes</param-name>
<param-value>1</param-value>
</context-param>
<context-param>
<param-name>jruby.max.runtimes</param-name>
<param-value>1</param-value>
</context-param>
<context-param>
<param-name>jruby.init.serial</param-name>
<param-value>true</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>
- 開発用サーバの起動
> dev_appserver.cmd .
- Webブラウザで開発用サーバにアクセス
- Google App Engineにデプロイ
- 「appengine-web.xml」の「application」と「version」を適切に設定して、次のコマンドを実行してね
> appcfg.cmd update .
コメント
トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20090812