2009-08-01
¢£[ruby][gae][sinatra]Sinatra on GAE
New!¢Í GAE/JRuby¥°¥ë¡¼¥×¤òºî¤Ã¤Æ¤ß¤Þ¤·¤¿
Rails on GAE¤è¤ê·Ú¤¯¤Æ¸½¼ÂŪ¤«¤â¤·¤ì¤Þ¤»¤ó¤¾¡£
ActiveRecord¤òÃæ¿´¤È¤·¤¿Rails¥Õ¥ë¥¹¥¿¥Ã¥¯¤ò»È¤¨¤Ê¤¤¤Ê¤éRails¤Ç¤¢¤ëɬÍפʤ¤¤â¤ó¤Í¡£
¥»¥Ã¥È¥¢¥Ã¥×
% cd path/to/your/projects % git clone git://github.com/jugyo/sinatra_on_gae.git PROJECT_NAME % cd PROJECT_NAME % dev_appserver.sh -p 9999 .
¥Ö¥é¥¦¥¶¤Ç¡Öhttp://localhost:9999/¡×¤ò³«¤¯
´ðËÜ
WEB-INF/app.rb¤òÊÔ½¸¤¹¤ë¡£
require 'rubygems' require 'sinatra' def h(s) Rack::Utils.escape_html(s) end get '/' do html = "" html += h(params[:msg]) html += "<hr />" html += h(request.env.inspect) html += "<hr />" return html end
http://localhost:9999/?msg=hellow ¤ò³«¤¯
DataMapper¡õdatastore-adapter¤Î¥¤¥ó¥¹¥È¡¼¥ë
GAE¤Î¥Ç¡¼¥¿¥¹¥È¥¢¤Ë¥Ç¡¼¥¿¤òÊݸ¤¹¤ë¤¿¤á¤Î¥é¥¤¥Ö¥é¥ê¤ò¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¡£
#!/bin/bash gem install -i WEB-INF/gems dm-core --no-rdoc --no-ri gem install -i WEB-INF/gems dm-aggregates --no-rdoc --no-ri gem install -i WEB-INF/gems dm-types --no-rdoc --no-ri cd WEB-INF/lib git clone git://github.com/genki/dm-datastore-adapter.git cd dm-datastore-adapter/lib/ jar cf ../../dm-datastore-adapter.jar . cd ../../ rm -rf dm-datastore-adapter
DataMapper¤Î»È¤¤Êý
require 'rubygems' require 'sinatra' require 'dm-core' require 'dm-aggregates' require 'dm-types' require 'dm-datastore-adapter/datastore-adapter' def h(s) Rack::Utils.escape_html(s) end DataMapper.setup(:datastore, :adapter => :datastore, :database => 'sinatratest') class Post include DataMapper::Resource def self.default_repository_name; :datastore end property :id, Serial property :body, Text property :created_at, DateTime before :save do self.created_at = Time.now end end get '/' do body = <<-HTML <html> <head> <META http-equiv="Content-Type" content="text/html; charset=UTF8"> </head> <body> Hello Sinatra on JRuby World!!<br /> <form method="POST"> <input type="text" name="post[body]" /> <input type="submit" value="post" /> </form> Posts:<br /> HTML Post.all(:order => [:created_at.desc]).each do |post| body += "<div>id:#{post.id} body:#{h(post.body)} created_at:#{post.created_at}</div>" end body += "</body></html>" body end post '/' do Post.create(params['post']) redirect '/' end
¥Ç¥×¥í¥¤
appcfg.sh update .
²¿¤«¤¬Ê¸»ú²½¤±¤¹¤ë¾ì¹ç
which dev_appserver.sh¤Çõ¤·¤Æ
/path/to/appengine-java-sdk-1.2.1/bin/dev_appserver.sh
java -Dfile.encoding=UTF-8 -ea -cp "$SDK_LIB/appengine-tools-api.jar"
¤Î¤è¤¦¤Ë¡Ö-Dfile.encoding=UTF-8¡×¤òÆþ¤ì¤¿¤é¤Ê¤ª¤Ã¤¿¡£mac¤Î¾ì¹ç¡£
ÄɲÃgem¤Î¥¤¥ó¥¹¥È¡¼¥ë
gem install -i WEB-INF/gems json --no-rdoc --no-ri
ÀÅŪ¥Õ¥¡¥¤¥ë(²èÁü,CSS,JS)
WEB-INF/appengine-web.xml¤òÊÔ½¸¤·¤Æ
<static-files>
<include path="/static/**.*" />
</static-files>
¤È¤·¡¢¡Ö/static/jquery-1.3.2.min.js¡×¤òÃÖ¤¤¤Æ¤ª¤±¤Ð
¡Öhttp://localhost:9999/static/jquery-1.3.2.min.js¡×¤Ç¥¢¥¯¥»¥¹¤Ç¤¤ë¡£
¤Ç¤¤Ê¤«¤Ã¤¿¤³¤È
- OAuth : gem oauth,hmac,jruby-openssh¤ò¤¤¤ì¤¿¤¬¤À¤á¤Ã¤¹¡£
- request.host¤¬ÊÑ¡£apache¤Îmod_proxy¤òÄ̤·¤¿¾ì¹ç¤Ëproxy¤Î¥Ø¥Ã¥À¸«¤Æ¤Ê¤¤¤ó¤¸¤ã¤Í¡©
TODO
- datastore¤Îʸ»ú¥³¡¼¥É¤Î»ÅÁȤߤòÄ´¤Ù¤ë
- memcache
- cookie
- ¥í¡¼¥«¥ë¤Î¥À¥Ã¥·¥å¥Ü¡¼¥É
- <resource-files>¤È<static-files>¤Î°ã¤¤¤Ï²¿¤Ç¤¹¤«¡©
- ¥Æ¥ó¥×¥ì¡¼¥È¥¨¥ó¥¸¥ó
»²¹Í£Õ£Ò£Ì
- 98 http://reader.livedoor.com/reader/
- 60 http://d.hatena.ne.jp/shibason/20090812/1250070639
- 59 http://diaspar.jp/node/183
- 53 http://www.google.co.jp/reader/view/
- 44 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja-JP:official&hs=lGs&q=screen+title&btnG=¸¡º÷&lr=lang_ja
- 30 http://hatenatunnel.appspot.com/
- 30 http://www.google.com/reader/view/
- 22 http://takeyu-web.weblogs.jp/rubynews/2009/08/irbgaedatastore.html
- 22 http://www.google.co.jp/search?rlz=1C1CHMB_jaJP298JP306&sourceid=chrome&ie=UTF-8&q=gae+sinatora
- 18 http://d.hatena.ne.jp/
