ruby-on-rails - 使用 Redis 存储 Rails session

标签 ruby-on-rails session redis

Rails 的默认 session 存储是 cookie_store .这使得 session 存储在客户端(如果我错了,请纠正我)。
我想更改此默认行为,以便可以将 session 存储到 Redis 数据库中。
我在互联网上找到的帖子/文章建议设置一个缓存存储来使用 redis_cache_store然后对于 session_store,使用 cache_store .
据我所知,这意味着缓存和 session 都将使用相同的数据库(实例)。我不想要那个。我希望 session 和缓存都使用不同的 Redis 实例,因此可以相应地配置它们。
我试图创建一个初始化文件 config/initializers/session_store.rb具有以下内容:

Rails.application.config.session_store :redis_cache_store, key: '_my_app_session'

但这不起作用。它给了我以下错误:

/application/configuration.rb:324:in `const_get': uninitialized constant ActionDispatch::Session::RedisCacheStore (NameError)


我也发现了这颗 gem https://github.com/redis-store/redis-store但我不确定使用这个 gem 会有多大问题,因为 Rails 已经有一个内置的 Redis 缓存存储 ( https://github.com/rails/rails/pull/31134 )

最佳答案

redis_cache_store是缓存存储,您不能直接将其用作 session 存储。您必须使用 redis_cache_store作为您的默认设置 cache_store然后你可以使用 cache_store为您 session_store .像这样的东西
在您的 config/application.rb (阅读 this 了解原因)

config.cache_store = :redis_cache_store, options
然后在您的 config/initializers/session_store.rb
Rails.application.config.session_store = :cache_store, key: '_app_session_key'
还有其他选项可以在不修改的情况下执行此操作 cache_store以及如 redis-storeredis-session-store

关于ruby-on-rails - 使用 Redis 存储 Rails session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66284406/

相关文章:

sql - Rails - 多个模型之间的公共(public)字段/报告数据 - STI、hstore 或拆分表?

ruby-on-rails - Rails 5 的 ActiveRecord::Migration 中的 [5.0] 是什么意思?

java - 如何在java中为我的web服务调用设置连接超时和请求超时

c# - ASP.NET + C# HttpContext.Current.Session 为空(WebService 内部)

java - PHP - 记住来自 mysql 的 Dropdownlist 的选定值

python - 为应用程序编写单元测试的模拟 redis

ruby-on-rails - Rails 部署,每个客户端一个环境是正确的方法吗?

redis - 使用正确的 Redis 数据类型进行基于时间的比较

python - 与多个经纪人一起开始 celery worker

ruby-on-rails - 在 rails 中查找 gem 的完整路径