我正在使用具有大型rails项目的超棒的cache-money gem。我经常得到这些例外
MemCache :: MemCacheError:执行过期“
似乎没有押韵也没有理由。 什么完全这意味着什么,以及如何解决?
编辑:
这是一个代表性的堆栈跟踪:
lib/authenticated_system.rb:100:in `login_from_session'
lib/authenticated_system.rb:12:in `current_user'
lib/authenticated_system.rb:6:in `logged_in?'
lib/authenticated_system.rb:35:in `authorized?'
lib/authenticated_system.rb:53:in `login_required'
有问题的行来自RESTful_Authentication:
self.current_user = User.find(session[:user_id]) if session[:user_id]
答案 0 :(得分:1)
我认为Michael Simons通过他的blog post回答了我的问题。实质上,这是Passenger和Memcached之间存在的known problem。
这是迈克尔的修复:
# environment.rb
begin
PhusionPassenger.on_event(:starting_worker_process) do |forked|
if forked
# We're in smart spawning mode, so...
# Close duplicated memcached connections - they will open themselves
CACHE.reset
end
end
# In case you're not running under Passenger (i.e. devmode with mongrel)
rescue NameError => error
end
答案 1 :(得分:0)
我通过队友听说Rails的默认内存缓存客户端不会尝试自动重新连接到memcache守护进程,如果由于某种原因它停止并重新启动,尽管我自己没有确认。 fiveruns memcache-client库解决了这个问题。