문제

랙 : 세션 : 메모리 기반 세션 용 풀을 사용하고 있습니다. 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 전화를 걸면 환경을 점검하는 무언가로 monkeypatch를 감싸서 개발 중에 만 사용되도록하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top