(这是关于Ramaze.net框架)
我在存储自定义对象时遇到了一些非常奇怪的问题 在会议中。我注意到只有对象上的属性 立即存储在会话中的正在更新。但是,如果那些 对象包含对其他对象的引用,引用的对象 如果会话中包含直接对象,则不会更新对象 在请求期间没有改变。
使用Ramaze :: FileCache时,这个问题才变得明显 作为我的会话缓存后端。我认为这个问题是掩盖的 使用内存中会话时的问题。
我发现问题是由于会话中的“浅拷贝” 在Ramaze :: Session :: Hash#method_missing中找到的逻辑 (LIB / ramaze /电流/会话/ hash.rb)。
作为一个快速测试,以确保我的想法是正确的,我评论说 “差异检查”,主要是强制会话更新 每一次。
def method_missing(*args, &block)
old = @hash.dup
result = @hash.send(*args, &block)
#unless old == @hash
Cache.sessions[@session.session_id] = self
#end
result
end
这个小黑客解决了我的问题。现在我的问题是: