我有一个关于我遇到的问题的问题。我试图实现一个对象(singleton)/thread,但是遇到了一个出乎意料的行为。
例如,我们有以下代码
class Persistence
attr_accessor :data
def self.instance
Thread.current[:persistence_store] ||= Persistence.new
end
def self.clear
Thread.current[:persistence_store] = nil
end
def get_data(user_id = nil)
self.data ||= AnotherClass.get_advanced_data(user_id)
end
end
假设有一个请求进来,我们
Persistence.instance.get_data(1)
那我们就去吧
Persistence.instance.get_data
但是让我们假设在5分钟内,一个用户发出了同样的请求。我发现
Persistence.instance.get_data(2)
Persistence.instance.get_数据(一)
rails不为每个请求创建一个新线程,这样就不会发生上述情况了?
我发现的唯一解决方案是在applicationcontroller中添加一个before\u过滤器
Persistence.clear
我有点困惑为什么会发生这种行为。希望你能理解我的问题。