先週の金曜の深夜に何故かひらめいてpythonはじめたとき放置してたGAEjの方をアップしておきます。

% sudo port install jruby
% sudo gem install google-appengine
% mkdir hello-gae-sinatra-dm-haml
% cd hello-gae-sinatra-dm-haml
必要なファイル・ディレクトリを自動作成しつつ各種gemを入れます。(カレントディレクトリの.gem以下に入る)
% appcfg.rb gem install sinatra dm-appengine addressable extlib haml
% vi config.ru 
require 'appengine-rack'
AppEngine::Rack.configure_app(
  :application => 'application-id',
  :version => 1)
require 'application'
run Sinatra::Application
% vi application.rb
require 'rubygems'
require 'sinatra'
require 'dm-core'
require 'haml'
require 'sass'

DataMapper.setup(:default, "appengine://auto")

class Post
  include DataMapper::Resource

  property :id, Serial
  property :body, Text
end

helpers do
  include Rack::Utils
  alias_method :h, :escape_html
end

get '/' do
  @posts = Post.all
  haml :index
end

post '/' do
  post = Post.create(params[:post])
  redirect '/'
end

get '/stylesheet.css' do
  content_type 'text/css', :charset => 'utf-8'
  sass :stylesheet
end

DataMapperパターンはActiveRecordパターンより抽象度が高いのでadapterさえあればKVSにも対応可能。凄いですね。

% mkdir views
% vi views/index.haml 
!!! XML
!!!
%html{:xmlns => "http://www.w3.org/1999/xhtml", "xml:lang" => "ja", :lang => "ja"}
  %head
    %title Guestbook using GAEj Sinatra DataMapper Haml
    %link{:href => "/stylesheet.css", :rel => "stylesheet", :type => "text/css", :media => "screen"}
  %body
    %form{:action => "/", :method => "post"}
      %input{:type => "text", :name => "post[body]"}
      %input{:type => "submit"}
    %ul
      - @posts.each do |post|
        %li
          = post.body
% vi views/stylesheet.sass
body
  :font
    :size 42px

最終的なディレクトリ構成はこんな感じ。

% tree
.
|-- WEB-INF
|   |-- appengine-generated
|   |   |-- build_status.yaml
|   |   |-- datastore-indexes-auto.xml
|   |   `-- local_db.bin
|   |-- appengine-web.xml
|   |-- lib
|   |   |-- appengine-api-1.0-sdk-1.2.5.jar
|   |   |-- appengine-jruby-0.0.4.jar
|   |   |-- appengine-jruby-rubygems-0.0.4.jar
|   |   |-- gems.jar
|   |   `-- jruby-rack-0.9.5.jar
|   `-- web.xml
|-- application.rb
|-- config.ru
|-- public
`-- views
    |-- index.haml
    `-- stylesheet.sass

必要なファイルは殆ど自動生成(or コピー)してくれてます。

% dev_appserver.rb .
Guestbook using GAEj Sinatra DataMapper Haml

日本語が文字化けるのは謎。

Comments


Option