初めての JRuby on Rails on Google App Engine
JRubyもGoogle App Engineもふれたことがなかったのですが、初めてふれてみました。
やはり、いろいろと失敗しながらも何とか たぶん一番かんたんなRails on GAE/Jにあるサンプルを GAEにデプロイできました ↓ 。
インストール
まずは、インストールから
Java
Mac(leopard)には最初から Java1.5が入っていますが、アップル - サポート - ダウンロード - Java for Mac OS X 10.5 アップデート 1から 最新の Java1.6をインストール。
インストールしただけでは Java1.5のままなので、アプリケション、ユーティリティの Java Preferences.app でJava1.6を最優先に設定。
% java -version java version "1.6.0_13" Java(TM) SE Runtime Environment (build 1.6.0_13-b03-211) Java HotSpot(TM) 64-Bit Server VM (build 11.3-b02-83, mixed mode)
JRuby
たぶん一番かんたんなRails on GAE/Jには、最新のJRubyを(GitHub)からインストールするように書いてありますが、jruby 1.3.1 が最近リリースされたのでこれを入れました。
% cd 適当なディレクトリー % wget http://dist.codehaus.org/jruby/1.3.1/jruby-bin-1.3.1.tar.gz % su - # cd /usr/local # tar xvzf 適当なディレクトリー/jruby-bin-1.3.1.tar.gz # ln -s jruby-1.3.1 jruby # exit % PATH=/usr/local/jruby/bin:$PATH % jruby --version jruby 1.3.1 (ruby 1.8.6p287) (2009-06-15 2fd6c3d) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_13) [x86_64-java]
Ruby 1.8 と違い gemもインストールされます ^^)
Rails
最新は2.3.3ですが、アプリケーション・テンプレートに合わせ 2.3.2をインストール。
Macには、MRI(CRuby)の環境も入っていますので 毎回 jruby コマンドを指定するのが無難です。
% sudo jruby -S gem install rails -v 2.3.2 --no-ri --no-rdoc
JRuby limited openssl loaded. gem install jruby-openssl for full support. のようなメッセージが出るので
% sudo jruby -S gem install jruby-openssl --no-ri --no-rdoc
それから Javaプログラマーにはお馴染みの WARファイルを作る為のコマンドもインストール
% sudo jruby -S gem install warbler --no-ri --no-rdoc
Google App Engine SDK for Javaのインストール
http://code.google.com/intl/en/appengine/downloads.htmlからGoogle App Engine SDK for Javaをダウンロドし適当な場所に展開
% cd 適当なディレクトリー % wget http://googleappengine.googlecode.com/files/appengine-java-sdk-1.2.2.zip % su - # cd /usr/local # unzip 適当なディレクトリー/appengine-java-sdk-1.2.2.zip # ln -s appengine-java-sdk-1.2.2 appengine-java-sdk # exit
GAE/J 用の Railsアプリを作る
GAE/J上で動かすには、いろいろな制限や GAEのAPIをアクセスする為のライブラリーが必要になります。これらの設定を行ってくれる アプリケーション・テンプレート が http://gist.github.com/103256.txt に公開されてます。ありがとうございます!
これを使います。この作業は時間がかかります !!
jruby -S rails rog -m http://gist.github.com/103256.txt
Google App Engine APIライブラリーをアプリにコピー
cp /usr/local/appengine-java-sdk/lib/user/appengine-api-1.0-sdk-1.2.2.jar rog/lib
サンプルプログラムを作る
これは、たぶん一番かんたんなRails on GAE/Jそのままです。
モデル作成
% cd rog % CLASSPATH=lib/appengine-api.jar jruby -S script/generate bumble_model Comment body created_at
コントロラー作成
% CLASSPATH=lib/appengine-api.jar jruby -S script/generate controller welcome % cat > 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 ^D
ビュー作成
% cat >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> ^D %
ルート設定
% vi config/routes.rb map.root :controller => "welcome" # を追加 % rm -f public/index.html
サンプルをローカルで動かす
サンプルの動作確認はローカルで行えます。
まずは WARファイルの作成。 rog.warファイルと tmp/warディレクリーができます。
jruby -S warble war
実行はGAE SDK内の開発用サーバーを使います。起動には時間がかかります
% /usr/local/appengine-java-sdk/bin/dev_appserver.sh tmp/war/ 2009-08-03 17:33:15.607 java[2026:10b] [Java CocoaComponent compatibility mode]: Enabled 2009-08-03 17:33:15.608 java[2026:10b] [Java CocoaComponent compatibility mode]: Setting timeout for SWT to 0.100000 The server is running at http://localhost:8080/
ブラウザーで http://localhost:8080/ をアクセスすると 上の画像にようなアプリが動きます。
しかし! 日本語を入れると文字化けします ^^; ・・・・・・・ つづく
.
.