Sinatra + rack: Sesión: piscina
Pregunta
Estoy utilizando rack: Sesión: piscina para sesiones basadas memoria. Me gustaría para acceder a las variables de instancia de la piscina que se pone en contacto en Estante: Sesión: piscina, así que se puede ver toda la sesión activa y contenía datos. Como lo puedo hacer que desde el interior de Sinatra o en el símbolo del IRB.
Mi idea inicial era :: Sinatra: Aplicación :: :: rack Sesión: Pool, pero esto me parece dar la clase y no la instancia actual por lo que la variable de la piscina no es accesible.
Solución
Si usted está haciendo esto sólo para el desarrollo / depuración / hurgando en código con un palo, se puede hacer un poco de mono parches y hacer la piscina una variable global.
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
O, usted podría escribir un fn envoltorio que lo hace por usted.
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
#...
Para la depuración, el parche mono es probablemente más limpio ya que no tiene que cambiar la llamada use
y se puede envolver el monkeypatch con algo que comprueba el medio ambiente por lo que sólo se utiliza durante devel, etc, etc.