11

我无法使用 memcached 作为使用 dalli gem 的 rails 4 会话存储。

这就是我所做的。

我将 dalli gem 添加到 Gemfile

gem 'dalli'

我在 config/initializers/session_store.rb 中添加了以下行

Rails.application.config.session_store ActionDispatch::Session::CacheStore, :expire_after => 20.minutes

我在 development.rb 中添加了以下行

config.cache_store = :dalli_store

现在,当我用瘦服务器启动我的开发服务器而不启动 memcached 服务器时,我仍然可以像往常一样登录。我应该得到一些错误,比如没有运行 memcached 服务器或类似的东西。

我不确定 rails 是否使用 memcached 作为会话存储。

有人能告诉我在开发环境中使用 memcached 作为会话存储时我错过了什么吗?

供您参考,我一直在使用设计作为身份验证宝石。

谢谢

4

1 回答 1

6

是的,您应该在控制台中看到这样的错误:

DalliError: No server available

但是,您仍然会得到会话 cookie,因为 Rails 会生成它并将其发送到浏览器。只是 Rails 没有地方存储与 cookie 相关的数据。

所以,对于演示,试试这个:

  1. 停止内存缓存。在某些控制器操作中执行以下操作:

    def some_action
      puts session[:test]
      session[:test] = "hello"
    end  
    

    不应该在 STDOUT 中看到“hello”。

  2. 现在,重新启动 memcached 并再次执行该操作。(可能需要刷新浏览器两次)。这一次,您应该看到“hello”。

  3. 如果再次停止 memcached,“hello”将不再显示。

我希望这清楚地表明 cookie 的生成(包含会话密钥)和根据 cookie 的值(即会话密钥)存储数据是两件不同的事情。当然,请确保 memcached 确实已停止。

至于即使在 memcached 停止的情况下也能够登录的部分,请检查您是否已清除域(localhost)的所有 cookie,并且在进行更改后您是否已重新启动 rails 服务器。另外,清除 tmp/cache 目录。

PS。如果您没有看到错误DalliError: No server available,则意味着 memcached 可能仍在某处运行。尝试通过 Rails 控制台通过 Dalli 访问 memcached,看看您是否能够存储/获取数据。

聚苯乙烯。如果您看到文件存储在 tmp 中(例如 tmp/cache/D83/760/_session_id%3A4d65e5827354d0e1e8153a4664b3caa1),那么这意味着 Rails 正在回退到 FileStore 来存储会话数据。

于 2013-12-14T07:29:07.530 回答