在rails中请求范围内的单例

使用rails中的singleton mixin我可以在rails app的范围内创建一个单例类。 但我想知道有没有办法在特定请求的范围内创建它?

由于请求与线程绑定,因此可以使用Thread本地存储:

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

用法:

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

……以及其他任何地方只需使用RequestSingleton.instance即可访问它。

由于它是本地线程,因此没有同步问题。