سؤال
أنا أستخدم الرف: جلسة: تجمع للدورات القائمة على الذاكرة. أرغب في الوصول إلى متغيرات مثيل المسبح الذي يتم الاتصال به في الرف: جلسة: تجمع حتى أتمكن من رؤية جميع الجلسة النشطة والبيانات الواردة. كيف يمكنني القيام بذلك من داخل 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، إلخ، إلخ.