我无法使用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。
由于
答案 0 :(得分:6)
是的,您应该在控制台中看到如下错误:
DalliError: No server available
但是,您仍将获得会话cookie,因为Rails将生成它并将其发送到浏览器。 只是Rails没有地方存储与cookie相关的数据。
所以,对于演示,试试这个:
停止memcached。在某些控制器操作中执行此操作:
def some_action
puts session[:test]
session[:test] = "hello"
end
你不应该在STDOUT中看到“你好”。
现在,重新启动memcached并再次点击操作。 (可能需要刷新浏览器两次)。 这一次,你应该看到“你好”。
如果再次停止memcached,将不再显示“hello”。
我希望能明确表示生成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以存储会话数据。