我正在使用 Rack:Session:Pool 进行基于内存的会话。我想访问在 Rack:Session:Pool 中联系的池实例变量,以便我可以看到所有活动会话和包含的数据。我怎样才能在 Sinatra 中或在 irb 提示符下做到这一点。
我最初的想法是::Sinatra:Application::Rack::Session: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
#...
对于调试,猴子补丁可能更干净,因为您不必更改use
调用,并且您可以用检查环境的东西包装猴子补丁,因此它仅在开发等期间使用。