2011-04-26 42 views
3

我正在研究Rails應用程序中的緩存層,並且無法緩存原始DataMapper對象。他們似乎有很多東西,使編組失敗(我得到一個關於元帥無法序列化Proc對象的錯誤)。Rails中DataMapper對象的替代序列化

所以我正在考慮編寫我自己的預序列化和後緩存的反序列化方法。具體來說,我將把DataMapper對象變成這樣的元組列表:

o = Foo.get(1234) 
as_list = o.model.properties.map { |p| [p.name, o.send(p.name)] } 

然後緩存該列表。

我的問題是:我如何重建DataMapper對象的方式使我可以像使用正常的DataMapper查詢構造一樣使用它?

我的天真方法Foo.new(foo=bar, goo=baz)似乎並沒有把它連接到所有的外鍵和東西。

+0

對於它的價值,從1.0'ish我沒有任何結構問題,曾經用馬歇爾#轉儲困擾DM。但是,我發現複雜的對象可能會轉儲到> 1-2MB(即使在LZO壓縮之後),因此緩存仍然是非啓動器。我非常期待您提出的任何建議。如果你稍後提出任何可以遠程操作的方法,請自己回答。 – 2011-04-26 19:46:09

回答

1

經過一些「有趣」的代碼,洞穴探險我似乎找到了一些作品:

mc.set(key, HashWithIndifferentAccess[o.attributes]) 

as_hash = mc.get(key) 
from_cache = Foo.load([as_hash], Foo.all.query).first 

模型上的load方法似乎得到什麼用途和query似乎以被要求獲取存儲庫名稱和其他一些東西。