X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/f778b61c0358ad2d0593be4040406a418ae46579..57ba7d6f0b160a2dc883d84a6864464d5de6083a:/config/initializers/session_store.rb diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb index a9afad2d6..72f2da7c5 100644 --- a/config/initializers/session_store.rb +++ b/config/initializers/session_store.rb @@ -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