为 Rack 提供按请求的全局存储。
你是否曾需要在 Rails 中使用全局变量? 糟透了,这是最糟糕的情况。如果你
如果需要全局状态,您可能会使用 Thread.current。例如:
def self.foo
Thread.current[:foo] ||= 0
end
def self.foo=(value)
Thread.current[:foo] = value
end噗! 我讨厌它。但你必须做你必须做的事 ...
现在每个人都在担心并发问题。所以人们都在使用这些工具。
例如 Thin 或 Puma 等带有线程的 Web 服务器。但是如果您使用 Thread.current,
如果您使用其中一个服务器,请小心! 值可能会保留更长时间
比你所预期的要多,这可能会导致错误。例如,如果我们有这个代码
我们的控制器:
def index
Thread.current[:counter] ||= 0
Thread.current[:counter] += 1
render :text => Thread.current[:counter]
end如果我们在 Webrick 上运行此程序,每次运行时都会得到 1 作为输出。但是如果您使用 Thin 运行它,则会先得到 1,然后是 2,然后是 3…
该 gem 包含一个 Railtie,它会为 Rails 3+ 应用程序正确配置一切,但如果您的应用程序绑定到旧版本(2.x),则您必须手动添加中间件。通常,只需将以下内容添加到 config/environment.rb 中:
暂无开放 Issues,或尚未同步最近议题。