首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sinatra +Rack:会话:池

Sinatra +Rack:会话:池
EN

Stack Overflow用户
提问于 2009-12-14 12:36:57
回答 1查看 2.3K关注 0票数 2

我使用Rack:Session:Pool作为基于内存的会话。我想访问在Rack: session :Pool中联系到的池实例变量,这样我就可以看到所有活动会话和包含的数据。如何在Sinatra中或在irb提示符上执行此操作。

我最初的想法是::Sinatra:Application::Rack::Session: pool,但这似乎给了我类,而不是当前实例,所以池变量是不可访问的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-15 06:53:50

如果你这样做只是为了开发/调试/用棍子戳代码,你可以做一些简单的修补,并使池成为一个全局变量。

代码语言:javascript
复制
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来为您做这件事。

代码语言:javascript
复制
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等过程中使用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1898952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档