Sinatra + Rack: Session: Pool
Frage
Ich bin mit Rack: Session: Pool für Speicher basierte Sessions. Ich würde gern die Pool-Instanz-Variablen zuzugreifen, die in Kontakt gebracht wird in Rack: Session: Pool, damit ich alles aktive Sitzung und enthaltenen Daten sehen kann. Wie kann ich dass aus Sinatra oder auf der irb prompt.
mein erster Gedanke war, :: Sinatra: Bewerbung :: Rack-:: Session: Pool, aber Das scheint mir die Klasse zu geben und nicht die aktuelle Instanz, so dass die Pool Variable ist nicht zugänglich.
Lösung
Wenn Sie dies nur für die Entwicklung tun werden / Debugging / Stossen bei Code mit einem Stock, Sie könnten etwas Affen Patchen tun und den Pool eine globale Variable machen.
require 'rubygems'
require 'sinatra'
require 'yaml'
class Rack::Session::Pool
def initialize app,options={}
super
$pool=@pool=Hash.new
@mutex=Mutex.new
end
end
use Rack::Session::Pool
get '/' do
y $pool
''
end
Oder Sie können einen Wrapper fn schreiben, die für Sie tut das.
require 'rubygems'
require 'sinatra'
require 'yaml'
module PoolWrapper
def self.new *args
middleware = Rack::Session::Pool.new *args
$pool=middleware.pool
middleware
end
end
use PoolWrapper
# same as above
#...
Für das Debuggen, ist der Affe Patch wahrscheinlich sauberer als Sie müssen nicht den use
Anruf ändern und Sie können die monkeypatch mit etwas wickeln, dass die Kontrollen der Umgebung, so dass es nur während der Entwick verwendet wird, etc, etc.