diff options
author | Joshua Peek <josh@joshpeek.com> | 2009-09-13 15:30:55 -0500 |
---|---|---|
committer | Joshua Peek <josh@joshpeek.com> | 2009-09-13 15:30:55 -0500 |
commit | a01bf41c61077a7b08371dec4206c84c05110f28 (patch) | |
tree | edf96a96fc073aefdd48a054bcb460cfd3f8e1d6 /actionpack | |
parent | fff3f0ae0cec1061f8b3e5cb44e189e94a4ad44f (diff) | |
download | rails-a01bf41c61077a7b08371dec4206c84c05110f28.tar.gz rails-a01bf41c61077a7b08371dec4206c84c05110f28.tar.bz2 rails-a01bf41c61077a7b08371dec4206c84c05110f28.zip |
Lazy require memcache for session middleware
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/lib/action_dispatch/middleware/session/mem_cache_store.rb | 75 |
1 files changed, 35 insertions, 40 deletions
diff --git a/actionpack/lib/action_dispatch/middleware/session/mem_cache_store.rb b/actionpack/lib/action_dispatch/middleware/session/mem_cache_store.rb index 1d9efc2b36..be1d5a43a2 100644 --- a/actionpack/lib/action_dispatch/middleware/session/mem_cache_store.rb +++ b/actionpack/lib/action_dispatch/middleware/session/mem_cache_store.rb @@ -1,52 +1,47 @@ -require "active_support/core_ext/kernel/requires" -begin - require_library_or_gem 'memcache' +module ActionDispatch + module Session + class MemCacheStore < AbstractStore + def initialize(app, options = {}) + require 'memcache' - module ActionDispatch - module Session - class MemCacheStore < AbstractStore - def initialize(app, options = {}) - # Support old :expires option - options[:expire_after] ||= options[:expires] + # Support old :expires option + options[:expire_after] ||= options[:expires] - super + super - @default_options = { - :namespace => 'rack:session', - :memcache_server => 'localhost:11211' - }.merge(@default_options) + @default_options = { + :namespace => 'rack:session', + :memcache_server => 'localhost:11211' + }.merge(@default_options) - @pool = options[:cache] || MemCache.new(@default_options[:memcache_server], @default_options) - unless @pool.servers.any? { |s| s.alive? } - raise "#{self} unable to find server during initialization." - end - @mutex = Mutex.new - - super + @pool = options[:cache] || MemCache.new(@default_options[:memcache_server], @default_options) + unless @pool.servers.any? { |s| s.alive? } + raise "#{self} unable to find server during initialization." end + @mutex = Mutex.new - private - def get_session(env, sid) - sid ||= generate_sid - begin - session = @pool.get(sid) || {} - rescue MemCache::MemCacheError, Errno::ECONNREFUSED - session = {} - end - [sid, session] - end + super + end - def set_session(env, sid, session_data) - options = env['rack.session.options'] - expiry = options[:expire_after] || 0 - @pool.set(sid, session_data, expiry) - return true + private + def get_session(env, sid) + sid ||= generate_sid + begin + session = @pool.get(sid) || {} rescue MemCache::MemCacheError, Errno::ECONNREFUSED - return false + session = {} end - end + [sid, session] + end + + def set_session(env, sid, session_data) + options = env['rack.session.options'] + expiry = options[:expire_after] || 0 + @pool.set(sid, session_data, expiry) + return true + rescue MemCache::MemCacheError, Errno::ECONNREFUSED + return false + end end end -rescue LoadError - # MemCache wasn't available so neither can the store be end |