【问题标题】:Store Rails session using Redis使用 Redis 存储 Rails 会话
【发布时间】:2021-05-22 20:21:18
【问题描述】:

Rails 的默认会话存储是cookie_store。这使得会话存储在客户端(如果我错了,请纠正我)。

我想更改此默认行为,以便可以将会话存储到 Redis 数据库中。 我在互联网上找到的帖子/文章建议设置一个缓存存储以使用redis_cache_store,然后为 session_store 设置使用cache_store

据我所知,这意味着缓存和会话都将使用同一个数据库(实例)。我不想要那个。我希望会话和缓存都使用不同的 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': 未初始化的常量 ActionDispatch::Session::RedisCacheStore (NameError)

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

【问题讨论】:

    标签: ruby-on-rails session redis


    【解决方案1】:

    redis_cache_store 是缓存存储,不能直接用作会话存储。您必须使用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

    【讨论】:

    • 如果你看第二段,你会发现这是我想要避免的模式。我需要让它们完全分开。现在我正在使用 redis-store gem。但对我来说意义不大,因为 rails 已经内置了 redis 实现
    • 目前无法使用不同的 redis db 进行会话和缓存存储。这里提供了更详细的解释stackoverflow.com/questions/51717865/…
    猜你喜欢
    • 2014-09-28
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 2019-10-31
    • 2015-09-18
    • 2020-05-31
    • 1970-01-01
    相关资源
    最近更新 更多