2

メモリベースのセッションにRack:Session:Poolを使用しています。Rack:Session:Poolで接続されているプールインスタンス変数にアクセスして、すべてのアクティブなセッションと含まれているデータを確認したいと思います。シナトラ内またはirbプロンプトでそれを行うにはどうすればよいですか。

私の最初の考えは::Sinatra:Application :: Rack :: Session:Poolでしたが、それは現在のインスタンスではなくクラスを与えているようで、プール変数にアクセスできません。

4

1 に答える 1

3

スティックを使用してコードを開発/デバッグ/突くためだけにこれを行う場合は、モンキーパッチを適用して、プールをグローバル変数にすることができます。

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デバッグの場合、呼び出しを変更する必要がなく、環境をチェックするものでモンキーパッチをラップして、開発中などにのみ使用できるため、モンキーパッチの方がおそらくクリーンです。

于 2009-12-14T22:53:49.827 に答える