DataMapper用のDataStoreアダプター、dm-datastore-adapter-0.2.2をリリースしました。

今回のリリースで以下のような機能がサポートされます。

  • トランザクション
  • OR条件
       1  Post.all(:id => [1,2,3])
    
    のような事が出来るようになりました。
  • NOT条件
       1  Post.all(:updated_at.not => nil)
       2  Post.all(:id.not => 3)
    
    などが出来るようになりました。

DataMapperのアダプタとして主に必要な機能はだいたい揃ってきました。

デモサイトであるWatchMe!もアップデートしています。

まだ実用的なサービスになってないですが、登録したサイトをクローリングして全てのページの監視を行い、エラーが発生したらメールで知らせるサービスになる予定です。

posted by Png genki on Fri 17 Apr 2009 at 04:37 with 8 comments

Comments:

Face taigou over 14 years ago.

はじめまして。dm-datastore-adapter-0.2.4のtransactionに関して質問させてください。下記クラスメソッドにモデルオブジェクトを更新するブロックを渡して実行させた際、NoMethodError: undefined method primitive_for for DataMapper::Adapters::DataStoreAdapter::Transaction:0x707730b7となりました。datastore-adapter.rbのds_service_getメソッドでcurrent_transactionを取得した後、呼び出そうとしています。下記の記述に誤り等ありますでしょうか?

class GaeTransaction def self.transaction begin txn = DataMapper.repository(:datastore).adapter.transaction_primitive txn.begin DataMapper.repository(:datastore).adapter.push_transaction(txn) yield DataMapper.repository(:datastore).adapter.pop_transaction txn.commit rescue pp $@ p $! txn.rollback ensure txn.close end end end

Png 瀧内元気 over 14 years ago.

以下のような使い方でも同じような問題が発生しますでしょうか?

   1  Post.transaction do
   2    # some code goes here
   3  end

Face taigou over 14 years ago.

以下のように、defaultのAdapterがセットされていない、とおこられます。 ちなみに、DataMapper.setup(:datastore, :adapter => :datastore, :database => 'gae_sample')を設定しています。また、Rails + DataMapper です。

Adapter not set: default. Did you forget to setup? --gems/dm-core-0.9.11/lib/dm-core/repository.rb:28:in adapter' --gems/dm-core-0.9.11/lib/dm-core/transaction.rb:50:inlink' --gems/dm-core-0.9.11/lib/dm-core/transaction.rb:44:in each' --gems/dm-core-0.9.11/lib/dm-core/transaction.rb:44:inlink' --gems/dm-core-0.9.11/lib/dm-core/transaction.rb:52:in link' --gems/dm-core-0.9.11/lib/dm-core/transaction.rb:44:ineach' --gems/dm-core-0.9.11/lib/dm-core/transaction.rb:44:in link' --gems/dm-core-0.9.11/lib/dm-core/transaction.rb:20:ininitialize' --gems/dm-core-0.9.11/lib/dm-core/model.rb:510:in transaction' --gae-sample-3/app/controllers/products_controller.rb:63:inupdate'

Png 瀧内元気 over 14 years ago.

DataStoreAdapter以外のアダプターを使った場合は正常に動作しますか?

Face taigou over 14 years ago.

Rails + DataMapper + sqlite3で試してみましたが、トランザクションは正常に動作しました。

ちなみに、DataMapper.setup(:datastore,・・・と設定した場合に、モデルクラスのrepositoriesが以下のようになっているのは、正しい姿なのでしょうか? 「@name=:default」があるために「Adapter not set: default」となるのかと。

DataMapper::Repository:0x591431e8 @identity_maps={}, @name=:datastore DataMapper::Repository:0x32f9286d @identity_maps={}, @name=:default DataMapper::Repository:0x3cd2640 @identity_maps={}, @name=:datastore

お手数おかけして申し訳ありません。よろしくお願いします。

Png 瀧内元気 over 14 years ago.

:datastoreの指定をせずに、デフォルトとして使ってみるとどうでしょうか?

Face taigou over 14 years ago.

ご指摘の通り、デフォルト指定で正常に動作しました。ありがとうございます。 しかし、なぜデフォルトでうまくいくのかよく理解できていないので、ソースよく読みます。たびたびお手数おかけして申し訳ございませんでした。

Png 瀧内元気 over 14 years ago.

良かったです :-)

or Preview
Social Bookmarks
  • Delicious
  • B_entry1439
  • Clip_16_12_w
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ