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
衣装の他、バッグ?財布?靴?香水?時計?ジュエリーなど幅広く手がけるイタリアのファッションブランド。グッチサングラス「BAMBOO AND METAL AVIATOR 」もこちらあちら在庫なし、グッチサングラス偽物に興味があったのはぜひブランドコピーにご注目してくれて、ブランドの元祖と呼ばれ、世界で初めて品質保証のためにデザイナーの名前を商品に入れたことでも知られる。オープンから数年のうちに、グッチオ?グッチの皮革製品は、乗馬からインスピレーションを得たハンドバッグ、トランク、グローブ、シューズ、ベルトのコレクションを求めて世界各地から顧客が訪れるようになる。
くつわとあぶみをモチーフにしたホースビットの革新的なデザインはこの頃に誕生し、後にグッチデザインの普遍的なシンボルとなる。グッチ2014/FW 新作のサングラス「BAMBOO AND METAL AVIATOR 」を紹介。「BAMBOO AND METAL AVIATOR 」グッチサングラスブランドはフィレンツェのクラシックなデザインの解釈を再演する。豊かな歴史的遺産と優れた職人技巧妙な融合、モダンでラグジュアリーを表す。www.btcxm.com「BAMBOO AND METAL AVIATOR 」グッチメガネは2013年発売してから、後数四半期のシリーズを数多く提供して、材質には天然なバンブーに用いられ、GGロゴをレーザーして、グッチサングラスにもっとユニークさを与える。わがしゃではスーパーコピー 代引き対応に採用。
最も細心のアプローチは、メガネフレームの完璧に現れるために曲げ加工にバンブーあたり内の水を抜くと確認して、バンブーに柔らか色合いを加え、また悪い天気を避けるため、竹ワックスにする。そして、各竹の寿命を長く守る。そんな細部まで注意して製造アプローチのおがげて、よくフィレンツェの家の最高の解釈、、常に卓越性の伝統に付着していると体験できる。グッチ商品を体験したいなら、GUCCI 激安 コピーを購入しましょう。