MemCacheError:执行过期

时间:2009-03-12 15:34:40

标签: ruby-on-rails memcached

我正在使用具有大型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]

2 个答案:

答案 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库解决了这个问题。