Switch to using memcache as the session store

As a temporary measure any session which is not found in memcache
will be looked for in the database instead.
This commit is contained in:
Tom Hughes 2012-02-23 11:25:15 +00:00
parent f778b61c03
commit 57ba7d6f0b

View file

@ -1,8 +1,35 @@
# Be sure to restart your server when you modify this file.
if STATUS == :database_offline or STATUS == :database_readonly
OpenStreetMap::Application.config.session_store :cookie_store, :key => '_osm_session'
if defined?(MEMCACHE_SERVERS)
unless STATUS == :database_offline or STATUS == :database_readonly
module Rack
module Session
class Memcache
def get_session(env, sid)
with_lock(env, [nil, {}]) do
unless sid and session = @pool.get(sid)
if sid and s = ActiveRecord::SessionStore::SqlBypass.find_by_session_id(sid)
session = s.data
s.destroy
else
sid, session = generate_sid, {}
end
unless /^STORED/ =~ @pool.add(sid, session)
raise "Session collision on '#{sid.inspect}'"
end
end
[sid, session]
end
end
end
end
end
end
cache = MemCache.new(:namespace => "rails:session", :string_return_types => true)
OpenStreetMap::Application.config.session_store :mem_cache_store, :cache => cache, :key => "_osm_session"
else
ActiveRecord::SessionStore.session_class = ActiveRecord::SessionStore::SqlBypass
OpenStreetMap::Application.config.session_store :active_record_store, :key => '_osm_session'
OpenStreetMap::Application.config.session_store :cookie_store, :key => '_osm_session'
end