Singleton en el scope de una solicitud de Rails

Usando la mezcla singleton de Rails, podría crear una clase de singleton en el ámbito de aplicación de Rails. Pero me preguntaba ¿Hay alguna forma de crearlo en el ámbito de una solicitud en particular?

Dado que una solicitud está vinculada a un hilo, puedes usar Thread local store:

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

Uso:

 def index RequestSingleton.instance.do_some_setup # ... RequestSingleton.clear end 

… y en cualquier otro lugar, simplemente use RequestSingleton.instance para acceder a él.

Dado que es un hilo local, no hay problemas de sincronización.