Сложное или глубокое хранение объектов в сеансе Ramaze сломано?

(это касается фреймворка Ramaze.net)

Я столкнулся с некоторыми действительно странными проблемами при хранении пользовательских объектов в сеансе. Я заметил, что обновляются только атрибуты объектов, немедленно сохраненных в сеансе. Однако если эти объекты содержали ссылки на другие объекты, эти ссылочные объекты не обновлялись, если непосредственные объекты, содержащиеся в сеансе, не изменялись во время запроса.

Эта проблема стала очевидной для меня только при использовании Ramaze :: FileCache в качестве моего механизма кэширования сеанса. Я считаю, что проблема маскируется или не является проблемой при использовании сеансов в памяти.

Я обнаружил, что проблема заключается в «мелкой копии» в логике сеанса, найденной в Ramaze :: Session :: Hash # method_missing (lib / ramaze / current / session / 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. Я что-то пропустил?
13.12.2008 23:04:16
1 ОТВЕТ
РЕШЕНИЕ

Эта проблема была решена в последней версии Ramaze (2009.04), пожалуйста, подайте исправление на трекер проблем Ramaze, если проблема не устранена .

2
29.04.2009 12:12:51