首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >升级到Rails 5.2时保持现有会话(使用Redis会话存储)

升级到Rails 5.2时保持现有会话(使用Redis会话存储)
EN

Stack Overflow用户
提问于 2019-06-17 20:41:17
回答 1查看 1.5K关注 0票数 1

我最近完成了一个Rails应用程序的大升级。我把应用程序从Rails 4.2.8递增到了Rails 5.2.3。一切进展顺利,我们所有的自动化测试都通过了,我们已经开始了用户接受测试。

到目前为止,唯一发现的问题是登录用户正在通过这次升级注册。我们以前安装了redis-rails gem (version 4.0.0),以便为我们的session_store启用Redis,现在我们使用的是Rails 5.2附带的内置Redis商店。

我的配置设置为使用相同的Redis连接和相同的session_store键值,我不知道为什么会话仍然被重置。似乎redis-rails 4.0.0没有正确设置session_store键值吗?

有没有其他人在从redis-rails升级到Rails 5.2时处理过这个问题,并成功地保留了现有的会话?

编辑:其他可能与更新相关的宝石包括ruby 2.3.4 => 2.5.5devise 4.0.3 => 4.6.2redis 3.2.2 => 4.1.2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-18 16:18:17

我已经搞清楚了!我认为用于key配置的session_store参数应该设置session_store键值。此参数实际上用于用户浏览器cookie键。我所做的升级确实为会话存储值添加了一个新的Redis键,但是看起来没有任何参数可以更改或删除这个新的Redis键。

我的解决方案是使用脚本重命名所有Redis会话键以匹配新格式(我使用“命名空间”作为Redis缓存存储命名空间):

代码语言:javascript
复制
redis-cli --scan --pattern "namespace:*"  | \
awk '/^/ {new_key=$1;gsub(/namespace:/,"namespace:_session_id:", new_key); printf "*3\r\n$6\r\nrename\r\n$" length($1) "\r\n" $1 "\r\n$" length(new_key) "\r\n"  new_key "\r\n";}'  | \
redis-cli --pipe

最后的相关配置是:

代码语言:javascript
复制
config.cache_store = :redis_cache_store, { url: ENV['REDIS_URL'], namespace: 'namespace' }
config.session_store :cache_store, key: '_mysite_session'

这样做的缺点是,它也使所有其他Redis缓存对象无效并被错误地重命名,因为会话存储之前没有标识它们的密钥。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56638657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档