A simple hack to get no more memcache timeouts in production.
You should add some kind of error notification above the ‘nil’ line, to know that memcache is no longer behaving properly.
(If it does not work, check if MemCache.new.cache_get_with_timeout_protection is defined -> load the hack in after_initialize)
code
class MemCache def cache_get_with_timeout_protection(*args) begin cache_get_without_timeout_protection(*args) rescue MemCache::MemCacheError => e if e.to_s == 'IO timeout' and (Rails.env.production? or Rails.env.staging?) nil else raise e end end end alias_method_chain :cache_get, :timeout_protection end
try it
start script/console kill -s STOP memcache-pid try reading from cache in console kill -s CONT memcache-pid