Google App Engine JRuby on Railsでbumbleを使うときの注意

GAE JRuby on railsでDatastoreを利用したい場合、
bumbleというライブラリが使えます。

bumbleを利用するには、rails_on_gaeプラグインをインストールして、
Model内でこのようにするだけで使えます。

class Memo
  include Bumble
  ds :title, :content
end

DBにデータを登録する際は、

Memo.create(:title => "test", :conten => "test").save!

検索する際は、

Memo.all({:title => "test"}) ※titleがtestのデータを取得
Memo.all() ※全データを取得

このようにすればOKです。

このほかにも、
オブジェクトのkey値を取得するには、以下。

memo = Memo.all().first ※Memoデータを全て取得し、その1つ目の要素を取得
memo.key  ※データのkey値を取得

このkey値を用いてのデータの検索も可能だそうです。
そこで実施してみました。

Memo.get(memo_key)  ※memo_keyはkey値

すると、エラーが以下のエラーが発生しました。

FATAL:
NameError (no get with arguments matching [class org.jruby.RubyFixnum] on object #<#:0x9e53ed @java_object=#>):

さらに、データを削除しようと以下を実施。

memo = Memo.all().first
memo.delete!

すると、また同じようなエラーが発生しました。

FATAL:
NameError (no delete with arguments matching [class org.jruby.RubyFixnum] on object #<#:0x16d03ba @java_object=#>):

この原因は、config/environment.rbのrequireの設定がまずかったみたいです。
rails_on_gaeプラグインをインストールした際に自動的に設定されるlib/bumble_appengine_jrubyの設定を変更し、以下のようにします。

require 'rubygems'
require 'lib/require_fix'
require 'lib/rake_fix'
#require 'lib/actionmailer-2.3.2.jar'
require 'lib/actionpack-2.3.2.jar'
#require 'lib/activerecord-2.3.2.jar'
#require 'lib/activeresource-2.3.2.jar'
require 'lib/activesupport-2.3.2.jar'
require 'lib/rails-2.3.2.jar'
require 'lib/jruby-openssl-0.5.1.jar'
#require 'lib/bumble_appengine_jruby' ←コメントアウト
require 'lib/bumble'  ←追加
#require 'lib/appengine-api.jar'
require 'lib/beeu'

require 'lib/appengine-apis-gems.jar'

これで無事、key値での検索と、データの削除が可能になりました。