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-

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

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

前回、デプロイまで成功したので、アプリが正常に動くところまで進めたいと思います。

GAEのコンソールで、ログを見ると以下のようになってました。

E 05-27 08:24AM 35.498
javax.servlet.ServletContext log: unable to create shared application instance
org.jruby.rack.RackInitializationException: no such file to load -- active_record
	from file:/base/data/home/apps/iknow-laf/1.333782736479566827/WEB-INF/lib/jruby-rack-0.9.4.jar!/jruby/rack/rails.rb:43:in `require_frameworks_with_servlet_env'
	from /base/data/home/apps/iknow-laf/1.333782736479566827/WEB-INF/config/../vendor/rails/railties/lib/initializer.rb:134:in `process'
	from /base/data/home/apps/iknow-laf/1.333782736479566827/WEB-INF/config/../vendor/rails/railties/lib/initializer.rb:113:in `run'
	from /base/data/home/apps/iknow-laf/1.333782736479566827/WEB-INF/config/environment.rb:14

environment.rbの14行目を見てみると、

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

コメントはずしたつもりが巻き戻ってたorz..

有効にして再度チャレンジ。

$ jruby -S warble
rake aborted!
no such file to load -- will_paginate
/usr/share/jruby-1.3.0RC1/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
(See full trace by running task with --trace)

なぜかいまさらwill_paginateのgemがないと怒られ。。

$ jruby -S gem list

*** LOCAL GEMS ***

actionmailer (2.3.2)
actionpack (2.3.2)
activerecord (2.3.2)
activeresource (2.3.2)
activesupport (2.3.2)
jruby-openssl (0.5)
rails (2.3.2)
rake (0.8.4)
rspec (1.2.6)
sources (0.0.1)
warbler (0.9.13)

確かに。

$ sudo $JRUBY_HOME/bin/jruby -S gem install will_paginate
Successfully installed will_paginate-2.2.2
1 gem installed
Installing ri documentation for will_paginate-2.2.2...
Installing RDoc documentation for will_paginate-2.2.2...

では気を取り直して。

$ jruby -S warble
cp config/environment.rb tmp/war/WEB-INF/config/environment.rb
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 .
fujibee@ubuntu810server:laf-gae$ rm tmp/war/WEB-INF/lib/jruby-complete-1.3.0RC1.jar

いちいちでかいjarを削除はめんどくさい。。何とかしたいところです。

$ cd ..
$ appengine-java-sdk-1.2.1/bin/appcfg.sh update laf-gae/tmp/wa
r
Reading application configuration data...
2009-05-28 01:05:10.987::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
Beginning server interaction for iknow-laf...
0% Creating staging directory
5% Scanning for jsp files.
20% Scanning files on local disk.
25% Scanned 250 files.
28% Scanned 500 files.
31% Scanned 750 files.
33% Initiating update.
34% Cloning 25 static files.
35% Cloning 778 application files.
36% Cloned 100 files.
37% Cloned 200 files.
37% Cloned 300 files.
37% Cloned 400 files.
37% Cloned 500 files.
37% Cloned 600 files.
37% Cloned 700 files.
40% Uploading 1 files.
52% Uploaded 1 files.
90% Deploying new version.
95% Will check again in 1 seconds
98% Closing update: new version is ready to start serving.
99% Uploading index definitions.

Update completed successfully.
Success.
Cleaning up temporary files...

成功しました。ちゃんと1ファイルしかアップロードされてないですね。
ということは、さっきインストールしたwill_paginateは入っていない?

とりあえずアプリにアクセスしてみると、アプリが500を返しているようです。。
エラーログを見ます。

C 05-27 05:55PM 32.638
Uncaught exception from servlet
com.google.apphosting.runtime.HardDeadlineExceededError: This request (6fb7b7f9d69018c0) started at 2009/05/28 00:55:03.484 UTC and was still executing at 2009/05/28 00:55:32.608 UTC.
	at org.jruby.RubySymbol$SymbolTable.getEntryFromTable(RubySymbol.java:647)
	at org.jruby.RubySymbol$SymbolTable.fastGetSymbol(RubySymbol.java:639)
	at org.jruby.Ruby.fastNewSymbol(Ruby.java:2736)
	at org.jruby.ast.SymbolNode.getSymbol(SymbolNode.java:84)
	at org.jruby.ast.SymbolNode.interpret(SymbolNode.java:89)
	at org.jruby.ast.FCallOneArgNode.interpret(FCallOneArgNode.java:36)
	at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
	at org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
	at org.jruby.evaluator.ASTInterpreter.evalClassDefinitionBody(ASTInterpreter.java:196)
	at org.jruby.ast.ClassNode.interpret(ClassNode.java:139)
	at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
	at org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
	at org.jruby.evaluator.ASTInterpreter.evalClassDefinitionBody(ASTInterpreter.java:196)
	at org.jruby.ast.ClassNode.interpret(ClassNode.java:139)
	at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
	at org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
	at org.jruby.ast.RootNode.interpret(RootNode.java:129)
	at org.jruby.Ruby.loadFile(Ruby.java:2350)
	at org.jruby.runtime.load.ExternalScript.load(ExternalScript.java:58)
	at org.jruby.runtime.load.LoadService.tryLoadingLibraryOrScript(LoadService.java:572)
	at org.jruby.runtime.load.LoadService.smartLoad(LoadService.java:279)
	at org.jruby.runtime.load.LoadService.require(LoadService.java:290)
	at org.jruby.RubyKernel.require(RubyKernel.java:905)
	at ...

なんか、根深そうですね。。とりあえず今日はここまで。

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

前回、結局GAE/Jの登録がまだでデプロイできないという悲しいオチから1週間、意外と早くGAE/Jの利用可能メールがGoogleから来ました!

Thanks for signing up to try Google App Engine for Java! Your account has now
been activated, so you can begin building applications with our new Java
runtime.

ということで、早速前回と同じコマンドでデプロイを試みてみます。

$ appengine-java-sdk-1.2.1/bin/appcfg.sh update laf-gae/tmp/war
Reading application configuration data...
2009-05-27 23:45:26.783::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
Beginning server interaction for iknow-laf...
0% Creating staging directory
5% Scanning for jsp files.
20% Scanning files on local disk.
25% Scanned 250 files.
28% Scanned 500 files.
31% Scanned 750 files.
33% Scanned 1000 files.
34% Initiating update.
Password for fujibee@gmail...:
35% Cloning 25 static files.
36% Cloning 1092 application files.
37% Cloned 100 files.
37% Cloned 200 files.
37% Cloned 300 files.
37% Cloned 400 files.
37% Cloned 500 files.
37% Cloned 600 files.
37% Cloned 700 files.
37% Cloned 800 files.
37% Cloned 900 files.
37% Cloned 1000 files.
40% Uploading 66 files.
52% Rolling back the update.

java.io.IOException: Error posting to URL: http://appengine.google.com/api/appversion/addfile?path=WEB-INF%2Fapp%2Fcontrollers%2Fapplication_controller.rb&app_id=iknow-laf&version=1&
400 Bad Request
Max number of files and blobs is 1000.

Unable to upload app: Error posting to URL: http://appengine.google.com/api/appversion/addfile?path=WEB-INF%2Fapp%2Fcontrollers%2Fapplication_controller.rb&app_id=iknow-laf&version=1&
400 Bad Request
Max number of files and blobs is 1000.

うーん、やっぱり適当に消したのでファイル数オーバーしているようです・・
でも、52%まで行きました!

$ rm -rf vendor/rails/railties/{doc,html,bin,builtin,environments,dispatches}
$ rm -rf vendor/rails/actionpack/test

最初からこうやってればよかったのにねぇ。。まあ、気を取り直して。

warblarでcleanしてからモノを準備し直します。

$ jruby -S warble war:clean
rm -rf tmp/war
rm -f laf-gae.war
$ jruby -S warble
...
cp public/images/rails.png tmp/war/images/rails.png
mkdir -p tmp/war/WEB-INF
jar cf laf-gae.war  -C tmp/war .

再実行すると。。

$ appengine-java-sdk-1.2.1/bin/appcfg.sh update laf-gae/tmp/war
Reading application configuration data...
2009-05-28 00:13:50.396::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/appcfg10512.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/appcfg10512.tmp/WEB-INF/lib/jruby-complete-1.3.0RC1.jar".  Consider using --enable_jar_splitting.
Please see the logs [/tmp/appcfg10511.log] for further information.

おっと。。jarのsplitが元に戻ってしまった。。
もう一度前回エントリのshを使ってjar分割。再実行。

$ cd ..
$ appengine-java-sdk-1.2.1/bin/appcfg.sh update laf-gae/tmp/wa
r
Reading application configuration data...
2009-05-28 00:15:50.078::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
Beginning server interaction for iknow-laf...
0% Creating staging directory
5% Scanning for jsp files.
20% Scanning files on local disk.
25% Scanned 250 files.
28% Scanned 500 files.
31% Scanned 750 files.
33% Initiating update.
34% Cloning 25 static files.
35% Cloning 778 application files.
36% Cloned 100 files.
37% Cloned 200 files.
37% Cloned 300 files.
37% Cloned 400 files.
37% Cloned 500 files.
37% Cloned 600 files.
37% Cloned 700 files.
40% Uploading 65 files.
52% Uploaded 16 files.
61% Uploaded 32 files.
68% Uploaded 48 files.
73% Uploaded 64 files.
90% Deploying new version.
95% Will check again in 1 seconds
98% Will check again in 2 seconds
99% Will check again in 4 seconds
99% Closing update: new version is ready to start serving.
99% Uploading index definitions.

Update completed successfully.
Success.
Cleaning up temporary files...

最後まで行きました!!

アプリケーションにアクセスしてみると、、

エラーになりましたが、Railsは動いているようです!やった!!
GAEはコンソール画面でログなどを見れるようなので、次回以降それを見ながらデバッグして、動かすところまでがんばります。

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

さらに前回の続き。
JRubyのjarを分割する必要があります。Ola Biniさんのスクリプトを使って分割してみます。

$ cd tmp/war/WEB-INF/lib/
#!/bin/sh

rm -rf jruby-core.jar
rm -rf ruby-stdlib.jar
rm -rf tmp_unpack
mkdir tmp_unpack
cd tmp_unpack
jar xf ../jruby-complete-1.3.0RC1.jar
cd ..
mkdir jruby-core
mv tmp_unpack/org jruby-core/
mv tmp_unpack/com jruby-core/
mv tmp_unpack/jline jruby-core/
mv tmp_unpack/jay jruby-core/
mv tmp_unpack/jruby jruby-core/
cd jruby-core
jar cf ../jruby-core.jar .
cd ../tmp_unpack
jar cf ../ruby-stdlib.jar .
cd ..
rm -rf jruby-core
rm -rf tmp_unpack
rm -rf jruby-complete-1.3.0RC1.jar

もういちどチャレンジ。

$ appengine-java-sdk-1.2.1/bin/appcfg.sh update laf-gae/tmp/war
Reading application configuration data...
2009-05-20 07:20:08.977::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
Beginning server interaction for iknow-laf...
0% Creating staging directory
5% Scanning for jsp files.
20% Scanning files on local disk.
25% Scanned 250 files.
28% Scanned 500 files.
31% Scanned 750 files.
33% Scanned 1000 files.
34% Initiating update.
Password for fujibee@gmail...:

java.io.IOException: Error posting to URL: http://appengine.google.com/api/appversion/create?app_id=iknow-laf&version=1&
400 Bad Request
Invalid runtime specified.

Unable to upload app: Error posting to URL: http://appengine.google.com/api/appversion/create?app_id=iknow-laf&version=1&
400 Bad Request
c.

Please see the logs [/tmp/appcfg36234.log] for further information.

おお、先に進んだけど、エラー発生。設定ファイルのRuntime設定かな?
と思い、ググってみたところ、GAE/Jを使うには最初の10000ユーザに入っていないといけないらしい・・

To request permission to upload an app which uses the Java runtime, sign up at the following URL: http://appengine.google.com/promo/java_runtime . For now, access will be limited to the first 10,000 to sign up.

http://code.google.com/intl/en/appengine/kb/java.html#runtime

素直にリンクから登録待ちを出しました。。運がよければ2〜3日中にGoogleからメールが来るらしい。
GAE/J環境を使えるようになるまでは、ローカルで試す方法を調べることにします。

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がでかすぎるとでました。やっぱり例のスクリプトで大きさ減らさないといけないみたい。
でも、途中まで行ったのがうれしい。。

きょうはここまで。

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

前回のエントリで、Google App EngineJavaが動くようになったからRailsアプリ動かすぞ!といってたのですが、某応募のため時間が取れませんでした・・
それもなんとか終わったので、遅ればせながらやってみます。

もう、id:technohippyさんがやられてますね・・

さっさとやりたいかたは、こちらを参照していただくということで・・・

さて、1ヶ月前からいろいろバージョンアップしているようです。
JRubyも、GAE/Jに対応するために1.3.0をRC1で出したようです。

GAE/Jも1.2.1になってますね。

http://code.google.com/intl/en/appengine/downloads.html#Google_App_Engine_SDK_for_Java

日本語ページのほうはバージョンも古く、Java対応バージョンもリンクされていないので注意が必要です。

では、それぞれ解凍して、やってみましょう。

$ jruby -v
jruby 1.3.0RC1 (ruby 1.8.6p287) (2009-05-01 9cbadb8) (Java HotSpot(TM) Client VM 1.6.0_10) [i386-java]

gitからしりとりアプリケーションをcloneします。

$ git clone git://github.com/fujibee/iknow-laf.git laf-gae
Initialized empty Git repository in /home/fujibee/work/laf-gae/.git/
remote: Counting objects: 684, done.
remote: Compressing objects: 100% (368/368), done.
remote: Total 684 (delta 332), reused 616 (delta 288)
Receiving objects: 100% (684/684), 1.26 MiB | 24 KiB/s, done.
Resolving deltas: 100% (332/332), done.

railsインストール

$ sudo $JRUBY_HOME/bin/jruby -S gem install rails --no-ri --no-rdoc
JRuby limited openssl loaded. gem install jruby-openssl for full support.
http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
Successfully installed actionpack-2.3.2
Successfully installed actionmailer-2.3.2
Successfully installed activeresource-2.3.2
Successfully installed rails-2.3.2
4 gems installed

ずいぶん新しくなってますね。。しりとりアプリもupdateしてみます。

$ jruby -S rake rails:update
(in /home/fujibee/work/laf-gae)
/home/fujibee/work/laf-gae/app/controllers/application.rb has been renamed to /home/fujibee/work/laf-gae/app/controllers/application_controller.rb, update your SCM as necessary

applicationコントローラの名前が変わったようです。。

ここら辺で今日は時間切れ。GAEまわりの作業はまた。

Google App EngineがJavaをサポート

先日、いままでPythonしか対応してなかったGoogle App Engine(以下GAE)がついにJava対応を発表しました!

どうやら、Javaをサブセット化し、一部の機能を省略することでGoogleのインフラ基盤に乗せることにしたようです。
もちろん、Javaのサブセット化はSunにとってはタブーなので、相当反発しているようですが・・

ところで、JavaがGAE対応したことで、期待されるのはJRubyがGAEに乗るか、ということですが、上のマイコミジャーナルの記事にあるように、対応可能なようです。ということは、私が公開しているしりとりゲームも乗せることができる?ということで、やってみたいと思います。

それで、JRubyを乗せることに成功したのは、今まで何度か取り上げた、JRuby本の著者、Ola Biniさんのようです。ブログに詳細がありました。

これによると、やらないといけないことは、

  1. JRubyを最新の1.2にバージョンアップする
  2. warblerをインストールしてプラグイン化(plaginize)する
  3. GAEの制限で1000ファイルしか置けないので、不要ファイルを削除する
  4. ActiveRecordがいらないので、それを削除&読み込まないようにする
  5. warblerの設定ファイル(warble.rb)でGAEに必要なファイル("appengine-web.xml", "datastore-indexes.xml")を読み込む
  6. ほかにJRuby用のいくつかの設定をGAE設定ファイルに追加
  7. JRuby用JARをGAE用に作成

ということのようです。結構いろいろありますね・・

Ola Biniさんのブログを参考に、少しづつやっていこうと思います。