RightAws::ActiveSdbのバグ回避のメモ(right_aws-1.10.0 gem)

Amazon SimpleDBに取り組もうと思い、いろいろ調査しています。Javaからはtypicaを使うと良いようですが、結構ローレベルなAPIになってます。(別にこれで用は足りるのですが・・)
Rubyからもアクセスしたいので調査したのですが、現在のシステムでAmazon S3にアクセスする時に利用しているRightAwsが良さげという事で試してみました。

まずはgemのインストール。

gem install right_aws

uuidtoolsも必要との事で、これも入れる。

gem install uuidtools

RDocにあるサンプルソース*1をそのまま実行してみると、エラーになりました。

/Library/Ruby/Gems/1.8/gems/right_aws-1.10.0/lib/sdb/active_sdb.rb:367:in `generate_id': undefined method `timestamp_create' for UUID:Class (NoMethodError)

依存しているuuidtoolsのUUIDクラスにtimestamp_createメソッドはない!と怒られてしまいました。
どうも、バージョン1.10.0のバグのようです。こちらに報告が上がっていました。

To fix this problem, you'll need to edit line 376 of active_sdb.rb and add the module (UUIDTools).

  • UUID.timestamp_create().to_s
  1. UUIDTools::UUID.timestamp_create().to_s

との事なので、先ほどのサンプルソースに一部手を加えると動くようになりました。

class Client < RightAws::ActiveSdb::Base
  def self.generate_id # :nodoc:
    UUIDTools::UUID.timestamp_create().to_s
  end
end

ちなみにこのRightAws::ActiveSdbは、ActiveRecordっぽいAPIになってます。激しく便利!ActiveRecordのidはシリアルですけど、ActiveSdbのidはUUIDになります。