Ramaze会话中的复杂或深层对象存储是否破碎?

时间:2008-12-13 23:04:16

标签: ruby session ramaze

(这是关于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

这个小黑客解决了我的问题。现在我的问题是:

  1. 这是一个安全合理的解决方案吗?
  2. 我应该避免在会话中存储复杂/深层对象吗?
  3. 有什么东西我不见了吗?

1 个答案:

答案 0 :(得分:2)

此问题已在最新的Ramaze(2009.04)中解决,如果问题仍然存在,请在Ramaze issue tracker处提交补丁。