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

前回の続きです。
まず、warblerをインストールします。

$ sudo $JRUBY_HOME/bin/jruby -S gem install warbler
Successfully installed warbler-0.9.13
1 gem installed
$ jruby -S warble config
cp /usr/share/jruby-1.3.0RC1/lib/ruby/gems/1.8/gems/warbler-0.9.13/generators/warble/templates/warble.rb config/warble.rb

warble.rbも作成しました。

次に、config/environment.rb に以下の変更を加えます。

config.frameworks -= [ :active_record, :active_resource, :action_mailer ]

warble.rbにもいくつかの変更を。

config.includes = FileList["appengine-web.xml", "datastore-indexes.xml"]
config.webxml.jruby.min.runtimes = 1
config.webxml.jruby.max.runtimes = 1
config.webxml.jruby.init.serial = true

では、ここからGAE/Jの設定。config/appengine-web.xml に以下の内容を保存。
GAEにアプリ登録をしてない場合は、ここでしておく。
(携帯のメールに認証コードを送る、って言われました。これ以外方法ないの?)

<?xml version="1.0" encoding="utf-8"?>
<!-- appengine-web.xml -->
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <!-- アプリ名 -->
    <application>iknow-laf</application>
    <version>1</version>

    <system-properties>
        <property name="jruby.management.enabled" value="false" />
        <property name="os.arch" value="" />
    </system-properties>
</appengine-web-app>

ここで、もうひとつの必要ファイル、"datastore-indexes.xml"を作ろうとしたんですが、あれ、これどうやるんだろう?
調べてみると、Googleのストレージを使うときに必要のようです。ここを読むと。とりあえずなくてもいいのかな?
上の、warble.rbからこのファイルは抜いてみます。

Googleのストレージは、Ora BiniさんのBumbleというのが使える、とのこと。
しりとりアプリのコードも少し変えないと。。

#class Game < ActiveRecord::Base
class Game
  include Bumble
  ds :score, :name

あと必要なのが、現在のrails gemsのフリーズと不要ファイルの削除。GAE/Jは1000ファイルまでしか使えないらしいので。

$ jruby -S rake rails:freeze:gems
(in /home/fujibee/work/laf-gae)
Freezing to the gems for Rails 2.3.2
rm -rf vendor/rails
mkdir -p vendor/rails
cd vendor/rails
Unpacked gem: '/home/fujibee/work/laf-gae/vendor/rails/activesupport-2.3.2'
mv activesupport-2.3.2 activesupport
Unpacked gem: '/home/fujibee/work/laf-gae/vendor/rails/activerecord-2.3.2'
mv activerecord-2.3.2 activerecord
Unpacked gem: '/home/fujibee/work/laf-gae/vendor/rails/actionpack-2.3.2'
mv actionpack-2.3.2 actionpack
Unpacked gem: '/home/fujibee/work/laf-gae/vendor/rails/actionmailer-2.3.2'
mv actionmailer-2.3.2 actionmailer
Unpacked gem: '/home/fujibee/work/laf-gae/vendor/rails/activeresource-2.3.2'
mv activeresource-2.3.2 activeresource
Unpacked gem: '/home/fujibee/work/laf-gae/vendor/rails/rails-2.3.2'
cd -
$ rm -rf vendor/rails/actionmailer
$ rm -rf vendor/rails/activerecord
$ rm -rf vendor/rails/activeresource

削除は適当です。足らないかも。

GAE/JのSDK JARも必要。

$ cp lib/user/appengine-api-1.0-sdk-1.2.1.jar /home/fujibee/work/laf-gae/lib/

そろそろ、一回GAE環境にアップしてみたい衝動に駆られたので、warblerでwar作って、デプロイ手続きしてみます。
(絶対に動かない自信あるけど。)

$ jruby -S warble
$ cd ..
fujibee@ubuntu810server:work$ appengine-java-sdk-1.2.1/bin/appcfg.sh update laf-gae/tmp/wa
r
Email: 
Reading application configuration data...
2009-05-15 22:40:07.768::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
Beginning server interaction for iknow-laf...
0% Creating staging directory
5% Scanning for jsp files.

java.lang.IllegalStateException: Found a jar file too large to upload: "/tmp/appcfg54928.tmp/WEB-INF/lib/jruby-complete-1.3.0RC1.jar".  Consider using --enable_jar_splitting.
Unable to upload app: Found a jar file too large to upload: "/tmp/appcfg54928.tmp/WEB-INF/lib/jruby-complete-1.3.0RC1.jar".  Consider using --enable_jar_splitting.
Please see the logs [/tmp/appcfg54927.log] for further information.

おー。jruby-complete-1.3.0RC1.jarがでかすぎるとでました。やっぱり例のスクリプトで大きさ減らさないといけないみたい。
でも、途中まで行ったのがうれしい。。

きょうはここまで。