ウェブサービスを作っています。

Warbler で簡単 Sinatra アプリ on GAE

JRuby と AppEngine SDK (Java) はインストールされているものとします。
JRuby は、mac なら macports などで導入できます。
SDK はインストールとか不要で、ダウンロードして解凍するだけで使えるので、はじめの一歩を踏み出しましょう。
Downloads - Google App Engine — Google Developers


追記(2009/08/02 22:12):
08/02 現在、英語ページからダウンロードできる SDK のほうが新しいですが、不安定な可能性があるので日本語ページにある旧バージョンを使ったほうがいいかもしません。


まず、warbler と sinatra を jgem (jruby のgem) でインストールします。

$ jgem install warbler sinatra


hello_world というアプリケーションを作ってみましょう。

$ mkdir hello_world
$ cd hello_world


hello_world フォルダ直下に config.ru と appengine-web.xml というファイルを作成します。
config.ru

require 'lib/app'
run Sinatra::Application


appengine-web.xml

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <application>(あなたの appid)</application>
    <version>1</version>
    <static-files />
    <resource-files />
    <sessions-enabled>true</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>


次に、warble の設定ファイルを書きます。

$ mkdir config
$ warble config

config/warble.rb というファイルが作成されるので、これを修正します。

Warbler::Config.new do |config|
  ...
  config.dirs = %w(lib)
  config.includes = FileList['appengine-web.xml']
  config.gems = ['sinatra']
  ...
end


メインプログラムを lib/app.rb に書きます。
必要ならば public フォルダや views フォルダも lib 以下に置くと、うまく動きます。

$ mkdir lib

lib/app.rb

require 'rubygems'
require 'sinatra'

get '/' do
  'Hello world!'
end


必要 jar ファイルを SDK からコピーして、魔法のコマンド warble で完成します。
開発用サーバで確認しましょう。

$ cp /path/to/gaej_sdk/lib/user/appengine-api-1.0-sdk-1.x.x.jar lib/
$ warble
$ /path/to/gaej_sdk/bin/dev_appserver.sh tmp/war

http://localhost:8080 で確認できます。
ちなみに http://localhost:8080/_ah/admin は、ローカル DataStore ビューアです。


アップロード。

$ /path/to/gaej_sdk/bin/appcfg.sh --enable_jar_splitting [email protected] --passin update tmp/war


http://(あなたの appid).appspot.com/ で Hello world。(1 回目の起動は、遅いです)


追記(2009/08/02 22:13):
この記事のやり方よりも、以下のテンプレートを用いた方がよいかもしれません。
jugyo/sinatra_on_gae · GitHub