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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top