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:
parent
f778b61c03
commit
57ba7d6f0b
1 changed files with 31 additions and 4 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue