ruby-on-rails - Rails : Thread. 请求范围数据共享的当前哈希

标签 ruby-on-rails ruby ruby-on-rails-3

我计划在 Ruby 中使用 Thread.Current 哈希,以便在我的 Rails 应用程序中按请求范围共享信息。 (我知道这可能不是最好的设计决策,甚至可能会破坏 MVC)。 我正在看这里提到的方法 http://coderrr.wordpress.com/2008/04/10/lets-stop-polluting-the-threadcurrent-hash/

这基本上向类添加了一个 thread_local_accessor 方法,并在给定线程超出范围时提供清除。有谁知道这是否有任何其他限制或我应该注意的陷阱?或者任何其他更干净的请求级别哈希的替代方法?

最佳答案

您链接到的代码不是线程安全的。它使用 ruby​​ 的 Hash 类,它不是线程安全的。您可以使用 ruby​​ 的同步原语之一来保护访问,例如互斥体。

此外,我不认为使用由线程 ID 索引的全局数据结构比仅使用 Thread.current 更好。

如果您担心键冲突,为什么不选择唯一的键,例如 GUID。基于您提供的链接中的示例:

class ThreadedLibrary
  @@LIBRARY_ID = 'D0052660-60E6-4624-B08E-ECA9200B2949'
  Thread.current[@@LIBRARY_ID] = {}

  def self.some_setting= val
    Thread.current[@@LIBRARY_ID][:some_setting] = val
  end

  def self.some_setting
    Thread.current[@@LIBRARY_ID][:some_setting] ||= :default
  end
end

关于ruby-on-rails - Rails : Thread. 请求范围数据共享的当前哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10491961/

相关文章:

ruby-on-rails - 如何更改 TinyMCE ruby​​ 插件的格式下拉框?

ruby-on-rails - Rails Bootstrap Devise Cancan Passenger Ubuntu 部署

javascript - therubyracer 或 nodejs,我应该使用哪个?

ruby-on-rails-3 - rmagick gem install "Can' t 找到 Magick-config”

javascript - 使用 Rails 3.1 在谷歌地图信息窗口中显示多个标记的链接

ruby-on-rails - 如果我想在按下按钮时触发外部 API 调用 - Controller 还是模型?

ruby-on-rails - 单击“后退”按钮时,直接从缓存中获得响应

ruby-on-rails - 如何在 if 和 else 语句中引用特定 Controller

ruby - 如何将类添加到 HAML 中的条件

ruby-on-rails - "name"是 Rails 中的保留字吗?