+class MemCache < Memcached::Rails
+ DEFAULT_OPTIONS = Memcached::DEFAULTS.merge(Memcached::Rails::DEFAULTS)
+
+ MemCacheError = Memcached::Error
+
+ @@connections = []
+
+ def initialize(options = {})
+ options.reverse_merge! :binary_protocol => true, :namespace_separator => ":"
+
+ super(MEMCACHE_SERVERS, options)
+
+ @@connections.push(self)
+
+ ObjectSpace.define_finalizer(self, lambda { |connection|
+ @@connections.remove(connection)
+ })
+ end
+
+ def self.connections
+ @@connections
+ end
+end
+
+if defined?(PhusionPassenger)
+ PhusionPassenger.on_event(:starting_worker_process) do |forked|
+ if forked
+ MemCache.connections.each { |connection| connection.reset }
+ end
+ end
+end