Sinatra + Rack: Sessione: Pool
Domanda
Sto usando Rack: Sessione: Pool per le sessioni a base di memoria. mi piacerebbe per accedere alle variabili istanza pool che viene contattato in Rack: Sessione: Pool così posso vedere tutto il sessione attiva e dei dati contenuti. Come posso fare che da dentro Sinatra o sul prompt IRB.
il mio pensiero iniziale era :: Sinatra: Application :: :: Rack Sessione: Pool, ma che mi sembra dare alla classe e non l'istanza corrente in modo che il variabile piscina non è accessibile.
Soluzione
Se si sta facendo questo solo per lo sviluppo / debug / frugando in codice con un bastone, si potrebbe fare alcune patch scimmia e rendere la piscina una variabile globale.
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
In alternativa, si potrebbe scrivere un fn wrapper che fa per voi.
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
#...
Per il debug, la patch scimmia è probabilmente più pulito in quanto non è necessario modificare la chiamata use
e si può avvolgere la monkeypatch con qualcosa che controlla l'ambiente in modo che viene utilizzato solo durante devel, ecc, ecc.