在rails中请求范围内的单例

时间:2014-07-24 07:47:35

标签: ruby-on-rails ruby singleton

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

1 个答案:

答案 0 :(得分:7)

由于请求与线程相关联,因此您可以使用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

用法:

def index
  RequestSingleton.instance.do_some_setup

  # ...

  RequestSingleton.clear
end

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

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