GAE/JでRailsを動かす(6)

前回、根が深そうなスタックトレースがでたところまでやりました。結局スタックトレースからは何が原因でエラーになったかわからなかったので、とりあえずローカルでRailsを立ち上げてみると、普通にいろいろファイルが足らなかった。。

GAEのクラスが足らないと出たので、GAE/Jのjarをenvironment.rb で読み込み。

require "#{RAILS_ROOT}/lib/java/appengine-api-1.0-sdk-1.2.1"

iknow gemをインストール。

$ sudo $JRUBY_HOME/bin/jruby -S gem install iknow-0.2.3.gem
[sudo] password for fujibee:
Successfully installed json-jruby-1.1.6-universal-java-1.6
Successfully installed ruby-hmac-0.3.2
Successfully installed oauth-0.3.4
Successfully installed iknow-0.2.3
4 gems installed

もう一度立ち上げてみます。

$ jruby script/server
=> Booting WEBrick
=> Rails 2.3.2 application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2009-05-29 19:46:03] INFO  WEBrick 1.3.1
[2009-05-29 19:46:03] INFO  ruby 1.8.6 (2009-05-01) [java]
[2009-05-29 19:46:03] INFO  WEBrick::HTTPServer#start: pid=31559 port=3000

とりあえず起動まで行きました!

warble.rbにgemを追加します。

config.gems += ["iknow", "will_paginate"]

warbler実行。

$ jruby -S warble
mkdir -p tmp/war/WEB-INF/gems/specifications
cp /usr/share/jruby-1.3.0RC1/lib/ruby/gems/1.8/specifications/iknow-0.2.3.gemspec tmp/war/WEB-INF/gems/specifications/iknow-0.2.3.gemspec
mkdir -p tmp/war/WEB-INF/gems/gems
cp /usr/share/jruby-1.3.0RC1/lib/ruby/gems/1.8/specifications/json-jruby-1.1.6-universal-java-1.6.gemspec tmp/war/WEB-INF/gems/specifications/json-jruby-1.1.6-universal-java-1.6.gemspec
cp /usr/share/jruby-1.3.0RC1/lib/ruby/gems/1.8/specifications/oauth-0.3.4.gemspec tmp/war/WEB-INF/gems/specifications/oauth-0.3.4.gemspec
cp /usr/share/jruby-1.3.0RC1/lib/ruby/gems/1.8/specifications/ruby-hmac-0.3.2.gemspec tmp/war/WEB-INF/gems/specifications/ruby-hmac-0.3.2.gemspec
cp /usr/share/jruby-1.3.0RC1/lib/ruby/gems/1.8/specifications/will_paginate-2.2.2.gemspec tmp/war/WEB-INF/gems/specifications/will_paginate-2.2.2.gemspec
cp config/warble.rb tmp/war/WEB-INF/config/warble.rb
cp config/environment.rb tmp/war/WEB-INF/config/environment.rb
mkdir -p tmp/war/WEB-INF/tmp/sessions
mkdir -p tmp/war/WEB-INF/tmp/sockets
mkdir -p tmp/war/WEB-INF/tmp/pids
mkdir -p tmp/war/WEB-INF/tmp/cache
cp /usr/share/jruby-1.3.0RC1/lib/ruby/gems/1.8/gems/warbler-0.9.13/lib/jruby-complete-1.3.0RC1.jar tmp/war/WEB-INF/lib/jruby-complete-1.3.0RC1.jar
cp /usr/share/jruby-1.3.0RC1/lib/ruby/gems/1.8/gems/warbler-0.9.13/lib/jruby-complete-1.3.0RC1.jar tmp/war/WEB-INF/lib/jruby-complete-1.3.0RC1.jar
mkdir -p tmp/war/WEB-INF
jar cf laf-gae.war  -C tmp/war .
$ rm tmp/war/WEB-INF/lib/jruby-complete-1.3.0RC1.jar

gemのファイルがたくさん追加されたようです。。ということは、

$ appengine-java-sdk-1.2.1/bin/appcfg.sh update laf-gae/tmp/war
Reading application configuration data...
...
Max number of files and blobs is 1000.

やっぱり。gem内のいらないファイル(とりあえずtestファイル)を消します。

$ find tmp/war/WEB-INF/gems/gems -type d -name "test*" -exec rm -rf {} \;

再チャレンジ!

$ appengine-java-sdk-1.2.1/bin/appcfg.sh update laf-gae/tmp/war
Reading application configuration data...
2009-05-29 20:02:40.089::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
Beginning server interaction for iknow-laf...
..
33% Initiating update.
34% Cloning 25 static files.
35% Cloning 910 application files.
..
Update completed successfully.
Success.

デプロイ成功!ファイルはとりあえず900ファイル台に収まったようです。

GAEのコンソールを見ると、

E 05-29 04:09AM 10.895
javax.servlet.ServletContext log: unable to create shared application instance
org.jruby.rack.RackInitializationException: wrong # of arguments(1 for 3)
	from /base/data/home/apps/iknow-laf/1.333825030772703407/WEB-INF/app/models/game.rb:6
	from /base/data/home/apps/iknow-laf/1.333825030772703407/WEB-INF/app/models/game.rb:31:in `require'
	from file:/base/data/home/apps/iknow-laf/1.333825030772703407/WEB-INF/lib/ruby-stdlib.jar!/META-

普通のアプリエラーまで落ちてきました。ここまでくればなんとかなりそうです。やった!