Rails on GAE/Jを試してみたときの過程メモ

やっぱりRailsを動かしたいです。

迷走開始

まず、こちらとかこちらとかをマネさせてもらおうとしました


ところが、手順どおりにやっているつもりなのにファイル数が1000越えた。
いまのところ、1000ファイル以上をGAEにデプロイすることは禁止されてる。

# find tmp/war -type f | wc -l 
1652


ここに相当数のファイルがある

# find tmp/war/WEB-INF/gems/gems -type f | wc -l 
1578


ライブラリが入ってる・・

# ll tmp/war/WEB-INF/gems/gems 
total 0
drwxr-xr-x 9 sogo staff 306 5 4 02:34 .
drwxr-xr-x 4 sogo staff 136 5 4 02:34 ..
drwxr-xr-x 9 sogo staff 306 5 4 02:34 actionmailer-2.3.2
drwxr-xr-x 10 sogo staff 340 5 4 02:34 actionpack-2.3.2
drwxr-xr-x 10 sogo staff 340 5 4 02:34 activerecord-2.3.2
drwxr-xr-x 7 sogo staff 238 5 4 02:34 activeresource-2.3.2
drwxr-xr-x 5 sogo staff 170 5 4 02:34 activesupport-2.3.2
drwxr-xr-x 16 sogo staff 544 5 4 02:34 rails-2.3.2
drwxr-xr-x 12 sogo staff 408 5 4 02:34 rake-0.8.4


activerecordとか必須じゃないのを消してみる・・

# rm -fr tmp/war/WEB-INF/gems/gems/activerecord-2.3.2 
# rm -fr tmp/war/WEB-INF/gems/gems/activeresource-2.3.2 
# rm -fr tmp/war/WEB-INF/gems/gems/actionmailer-2.3.2 


それでも1000越えてる・・・

# find tmp/war/WEB-INF/gems/gems -type f | wc -l
1115


ダメだ・・なんかどっかでミスってるみたいだ。
このままデプロイしてもエラーになる

Unable to upload:
java.io.IOException: Error posting to URL: http://appengine.google.com/api/appversion/addfile?path=WEB-INF%2Fappengine-web.xml&app_id=honconn-jruby-gae&version=1&
400 Bad Request
Max number of files and blobs is 1000.

ファイル数はMAX1000まで!!

別のやり方を探す

キャッチーなタイトル最高です。
rails_on_gaeというプラグインがガツンとGAE向けにアプリを仕立ててくれるし、Railsをjarにまとめてあるのでファイル数制限も余裕で回避!というパーフェクト超人じゃないですか。
さくっとできました。たまらん。

けれども、続けてサンプルアプリ作成をマネしてscript/generateしようとしたらエラーになってしまいました。

# script/generate bumble_model Comment body created_at
/Users/sogo/code/jruby/lib/ruby/site_ruby/1.8/builtin/javasupport/core_ext/object.rb:116:in `get_proxy_or_package_under_package': cannot load Java class com.google.appengine.api.datastore.DatastoreServiceFactory (NameError)

どうもappengineのクラスがロードできてないみたいです。
config/environment.rbに

require 'lib/appengine-api.jar'

と書いてみたら動いた。

# script/generate bumble_model Comment body created_at
create app/models/comment.rb

とりあえず結果オーライです。


で、なんやかんやして、ローカルで動くことを確認して、GAEにデプロイして、アクセスするとエラーになったー

javax.servlet.ServletContext log: unable to create shared application instance
org.jruby.rack.RackInitializationException: no such file to load -- lib/appengine-api
	from lib/require_fix.rb:14:in `require'

なんかさっき付け足したのはイランことをしてしまったようなので
config/environment.rbの

require 'lib/appengine-api.jar'

を消してからデプロイして動くようになりました。このあたり理屈はぜんぜんわかってないですね。


でも間違いなく簡単にRailsをGAEで動かすことができました。
DataStoreのラッパーであるBumbleが使えるようになってるし!
めっちゃ助かります。