0

我在一个大型 Rails 项目中使用了超棒的缓存货币 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]
4

2 回答 2

1

我认为Michael Simons通过他的文回答了我的问题。本质上,这是一个存在于Passenger 和Memcached 之间的已知问题。

这是迈克尔的修复:

# 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
于 2009-03-25T17:33:56.890 回答
0

我从队友那里听说,Rails 的默认 memcache 客户端不会尝试自动重新连接到 memcache 守护进程,如果由于某种原因它停止并重新启动,尽管我自己还没有确认。Fiveruns memcache-client库修复了这个问题。

于 2009-03-14T18:59:48.103 回答