Сложное или глубокое хранение объектов в сеансе 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. Я что-то упускаю?

1 ответ

Решение

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

Другие вопросы по тегам