たぶん一番かんたんなRails on GAE/J
rails APPNAME -m http://gist.github.com/103256.txt
いろいろまとめてプラギン化した上で、アプリケーションテンプレートもご用意致しました。瀧内さんとこ参考にRailsをjarにまとめてあるのでファイル数制限も余裕で回避。あれこれ結構がんばった。
GAE/Jのアカウントが手に入ったみんなはコレ使って遠慮なくGoogleクラウドでRailsすればいいと思う。手に入ってない人も今のうちに開発サーバーで動かしとけば、5月末のGoogle I/Oできっと一般公開されるよ。
てことで以下手順。
必要なライブラリを入れる
GAE/JのSDKとJRubyとRailsとWarblerは流石に事前に必要。この辺参考にどうぞ。すでにこれらが入ってる人はもちろん飛ばしてよし。
一応参考までに自分では試さずに書くけど、多分こんな感じ。
$ svn co http://svn.codehaus.org/jruby/trunk/jruby jruby $ cd jruby $ mvn $ set JRUBY_HOME=xxx $ set PATH=$PATH:$JRUBY_HOME/bin $ jruby -v jruby 1.3.0 (ruby 1.8.6p287) (2009-04-09 r6586) (Java HotSpot(TM) Client VM 1.5.0_16) [i386-java] $ jruby -S gem install-v=2.3.2 rails -y --no-ri --no-rdoc $ jruby -S gem install warbler -y --no-ri --no-rdoc
GAE SDKのbinにPATH通すのも忘れずに。
アプリケーション名を決める
AppEngineコンソールでアプリ名を取得。まだJavaアカウントがなくてローカルで試すだけの人はこの項は飛ばしてOK。
アプリケーションテンプレートを指定してrailsコマンド実行
環境変数GEM_HOMEがあると失敗することがあったので消してから。(アプリ名はrog)
$ unset GEM_HOME $ rails rog -m http://gist.github.com/103256.txt
Rails on GAE/Jとしては以上で終了。多分動く。
・・・
以下、動作確認兼使い方説明として一行掲示板作ってみる。
モデル作成
実はこのアプリケーションテンプレートにはbumble_modelジェネレータがおまけでついてきてる。まぁ別に大したことやらないけども。
$ cd rog $ ./script/generate bumble_model Comment body created_at $ cat app/models/comment.rb
class Comment include Bumble ds :body, :created_at end
コントローラー作成
これは普通につくるだけ。
$ ./script/generate controller welcome $ vim app/controllers/welcome_controller.rb
class WelcomeController < ApplicationController def index @comments = Comment.all({}, :iorder => :created_at) end def comment unless params[:body].blank? Comment.create(:body => params[:body], :created_at => Time.now) end redirect_to :action => 'index' end end
ビュー作成
これも普通に作るだけ
$ vim app/views/welcome/index.html.erb
<html> <head><title>Rails on GAE</title></head> <body> <% form_tag :action => 'comment' do %> <%= text_field_tag 'body', '', :size => 50 %> <%= submit_tag 'Comment' %> <% end %> <ul> <%- @comments.each do |comment| -%> <li><%=h comment.body %> (<%= comment.created_at %>)</li> <%- end -%> </ul> </body> </html>
ルート設定
普通。
$ vim config/routes.rb map.root :controller => "welcome" $ rm public/index.html remove public/index.html? y
warに固めて
$ warble war
war自体はいらないんだけど。
ローカルで確認できたのでデプロイ
$ appcfg.sh update tmp/war
本番で確認
http://4.latest.itrain.appspot.com/
この為にわざわざアプリ名を取るのはいやなのでappengine-web.xmlを修正してアプリ名itrain、バージョン番号4で上げたけど、アプリ自体は上の手順で作ったもの。GAEではDataStoreがバージョンに関わらず共通なので、既にデータがいろいろ入ってるのはご愛嬌
注意
既存アプリには使わないでください。いろんなファイルを直接書き換えるので責任持てません。
Railsのバージョンは2.3.2固定です。
上の手順は私のiMacでしか試してません。うまく行かなかったらコメント欄で聞いてください。
そのままだと動かなかったので付属のRailsは一カ所だけ手を入れてます。もしかしたら何かおかしくなるかも。
actionpack-2.3.2/lib/action_controller/rescue.rb
#RESCUES_TEMPLATE_PATH = ActionView::Template::EagerPath.new_and_loaded( # File.join(File.dirname(__FILE__), "templates")) RESCUES_TEMPLATE_PATH = ActionView::Template::Path.new( File.join(File.dirname(__FILE__), "templates"))