Мы используем redis для хранения наших сессий в Rails 5.2, и недавно мы переключили наш редис-хостинг, и начали видеть некоторые странные ошибки для некоторых сессий, но не все:
puma 002 debug_exceptions.rb:9 exception=[ArgumentError: dump format error(0x37): /app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_suppo
rt/core_ext/marshal.rb:6:in `load'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2.1/lib/active_support/core_ext/marshal.rb:6:in `load'
/app/vendor/bundle/ruby/2.5.0/gems/redis-store-1.5.0/lib/redis/store/serialization.rb:44:in `_unmarshal'
/app/vendor/bundle/ruby/2.5.0/gems/redis-store-1.5.0/lib/redis/store/serialization.rb:17:in `get'
/app/vendor/bundle/ruby/2.5.0/gems/redis-store-1.5.0/lib/redis/store/namespace.rb:23:in `block in get'
/app/vendor/bundle/ruby/2.5.0/gems/redis-store-1.5.0/lib/redis/store/namespace.rb:89:in `namespace'
/app/vendor/bundle/ruby/2.5.0/gems/redis-store-1.5.0/lib/redis/store/namespace.rb:23:in `get'
/app/vendor/bundle/ruby/2.5.0/gems/redis-rack-2.0.4/lib/rack/session/redis.rb:50:in `block (2 levels) in get_session'
/app/vendor/bundle/ruby/2.5.0/gems/redis-rack-2.0.4/lib/rack/session/redis.rb:94:in `with'
/app/vendor/bundle/ruby/2.5.0/gems/redis-rack-2.0.4/lib/rack/session/redis.rb:50:in `block in get_session'
/app/vendor/bundle/ruby/2.5.0/gems/redis-rack-2.0.4/lib/rack/session/redis.rb:79:in `with_lock'
/app/vendor/bundle/ruby/2.5.0/gems/redis-rack-2.0.4/lib/rack/session/redis.rb:49:in `get_session'
/app/vendor/bundle/ruby/2.5.0/gems/rack-2.0.6/lib/rack/session/abstract/id.rb:425:in `find_session'
/app/vendor/bundle/ruby/2.5.0/gems/rack-2.0.6/lib/rack/session/abstract/id.rb:280:in `load_session'
/app/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/middleware/session/abstract_store.rb:46:in `block in load_session'
/app/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/middleware/session/abstract_store.rb:54:in `stale_session_check!'
/app/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/middleware/session/abstract_store.rb:46:in `load_session'
/app/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/request/session.rb:221:in `load!'
/app/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/request/session.rb:217:in `load_for_write!'
/app/vendor/bundle/ruby/2.5.0/gems/actionpack-5.2.2.1/lib/action_dispatch/request/session.rb:118:in `[]='
...
Когда мы проверяем сеанс и пытаемся вручную использовать Marshal.load
в данных, мы получаем ту же ошибку.
У нас есть пара вопросов, связанных с этим:
- Если загрузка сеанса не удалась, не должен ли Rails сделать сеанс недействительным и отменить его? Есть ли какая-либо конфигурация или опция для этого?
- Вероятно, мы не сможем "исправить" данные сеанса, но нам все еще любопытно понять, что конкретно не удалось загрузить ... Есть ли способ получить более точную информацию из
Marshal.load
или отладки (де) сериализация точнее?