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が使えるようになってるし!
めっちゃ助かります。