Pergunta

Eu estou usando Rack: Sessão: Piscina para sessões baseado em memória. eu gostaria para acessar as variáveis ??de instância piscina que é contactados em Panfletos: Sessão: Piscina para que eu possa ver toda a sessão ativa e dados contidos. Como eu posso fazer que a partir de dentro Sinatra ou no IRB rápida.

Meu pensamento inicial era :: Sinatra: Aplicação :: Rack :: Sessão: Pool, mas que me parece dar à classe e não a instância atual de modo que o variável piscina não é acessível.

Foi útil?

Solução

Se você está fazendo isso apenas para o desenvolvimento / depuração / cutucando código com uma vara, você poderia fazer algum patch macaco e fazer a piscina uma variável 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

Ou, você poderia escrever um fn wrapper que faz isso para você.

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 depuração, o patch macaco provavelmente é mais limpo que você não tem que alterar a chamada use e você pode embrulhar o monkeypatch com algo que verifica o ambiente para que ele só é usado durante devel, etc, etc.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top