rails 4使用dalli将memcached用作会话存储

时间:2013-12-12 08:38:03

标签: session ruby-on-rails-4 memcached dalli

我无法使用dalli gem将memcached用作使用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用作会话存储时我错过了什么?

为了您的信息,我一直在使用devise作为身份验证gem。

由于

1 个答案:

答案 0 :(得分:6)

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

DalliError: No server available

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

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

  1. 停止memcached。在某些控制器操作中执行此操作:

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

    不应该在STDOUT中看到“你好”。

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

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

  4. 我希望能明确表示生成cookie(包含会话密钥) 并且针对cookie的值(即会话密钥)存储数据是两个不同的事情。当然,确保memcached真的停止了。

    对于甚至在memcached停止时能够登录的部分,检查您是否已清除域(localhost)的所有cookie以及您在进行更改后重新启动了rails服务器。另外,清除tmp / cache目录。

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

    PPS。如果您看到文件存储在tmp中(如tmp / cache / D83 / 760 / _session_id%3A4d65e5827354d0e1e8153a4664b3caa1),那么这意味着Rails将回退到FileStore以存储会话数据。