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