2014-07-24 11 views

risposta

7

Dal momento che la richiesta è legata a un filo, è possibile utilizzare Thread local negozio:

class RequestSingleton 
    def self.instance 
    Thread.current['request-singleton'] ||= RequestSingleton.new 
    end 

    def self.clear 
    Thread.current['request-singleton'] = nil 
    end 
end 

Usage:

def index 
    RequestSingleton.instance.do_some_setup 

    # ... 

    RequestSingleton.clear 
end 

... e in qualsiasi altro luogo semplicemente utilizzare RequestSingleton.instance per accedervi.

Poiché è thread locale, non ci sono problemi di sincronizzazione.