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-store和 redis-session-store
关于ruby-on-rails - 使用 Redis 存储 Rails session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66284406/