سؤال

أنا أستخدم الرف: جلسة: تجمع للدورات القائمة على الذاكرة. أرغب في الوصول إلى متغيرات مثيل المسبح الذي يتم الاتصال به في الرف: جلسة: تجمع حتى أتمكن من رؤية جميع الجلسة النشطة والبيانات الواردة. كيف يمكنني القيام بذلك من داخل Sinatra أو على موجه IRB.

رأيي الأولي كان :: سيناترا: التطبيق :: رف الجلسة :: حمام السباحة، ولكن يبدو أنه يعطيني الفصل وليس المثيل الحالي حتى لا يمكن الوصول إلى متغير التجمع.

هل كانت مفيدة؟

المحلول

إذا كنت تقوم بذلك فقط للتنمية / التصحيح / التمثال في التعليمات البرمجية بعصا، فيمكنك القيام بترقيع القرد وجعل المسبح متغير عالمي.

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 استدعاء ويمكنك أن تلتف على الرد على شيء يتحقق من البيئة حتى يتم استخدامه فقط خلال DEVEL، إلخ، إلخ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top