我使用Rack:Session:Pool作为基于内存的会话。我想访问在Rack: session :Pool中联系到的池实例变量,这样我就可以看到所有活动会话和包含的数据。如何在Sinatra中或在irb提示符上执行此操作。
我最初的想法是::Sinatra:Application::Rack::Session: pool,但这似乎给了我类,而不是当前实例,所以池变量是不可访问的。
发布于 2009-12-15 06:53:50
如果你这样做只是为了开发/调试/用棍子戳代码,你可以做一些简单的修补,并使池成为一个全局变量。
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调用,而且你可以用一些检查环境的东西来包装monkeypatch,这样它只在devel等过程中使用。
https://stackoverflow.com/questions/1898952
复制相似问题