Вопрос

Я использую Rack: Session: Pool для сеансов на основе памяти.Я хотел бы получить доступ к переменным экземпляра пула, с которыми связываются в Rack: Session: Pool, чтобы я мог видеть весь активный сеанс и содержащиеся в нем данные.Как я могу сделать это из Sinatra или из командной строки irb.

моей первоначальной мыслью было ::Sinatra:Application::Rack::Session: Pool, но похоже, это дает мне класс, а не текущий экземпляр, поэтому переменная pool недоступна.

Это было полезно?

Решение

Если вы делаете это только для разработки / отладки / ковыряния в коде флешкой, вы могли бы выполнить некоторые обезьяньи исправления и сделать пул глобальной переменной.

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

Или вы могли бы написать оболочку fn, которая сделает это за вас.

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 
#...

Для отладки патч monkey, вероятно, более чистый, поскольку вам не нужно менять use вызовите, и вы можете обернуть monkeypatch чем-то, что проверяет среду, чтобы она использовалась только во время разработки, и т.д. ит.п.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top