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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top