在 Rails 中使用 Thread.current 和 Unicorn 安全吗?

Is it safe to use Thread.current with Unicorn in Rails?

我需要在模型代码中获取当前登录用户名,但我不想添加新的额外参数,这需要进行很多更改。所以我在想是不是把登录用户名放在Thread.current里,然后在model代码里访问。 它可以通过简单的尝试工作,但我担心它是否可以与 unicorn multi workers 一起正常工作,例如 - 登录请求由工作人员 1 处理,第二个请求由工作人员 2 处理。我的基本理解是它应该没问题,因为我将它从会话设置为 Thread.current 在 ApplicationController 中应该执行的过滤器之前每个请求的开始。 - 如果 unicorn worker 出于某种原因被杀死并重新启动,请求是否会重新启动,并且仍然有会话数据? 我对独角兽的了解不够...所以这可能是一个幼稚的问题...

使用 Thread.current 还有其他可能的问题吗?

在此先感谢您的帮助!

不用直接用Threads,可以用这个gemhttps://github.com/steveklabnik/request_store

您的用户模型代码可能如下所示:

def self.current_user
  RequestStore.store[:current_user]
end

def self.current_user=(logged_in_user)
  RequestStore.store[:current_user] = logged_in_user
end

并且在您的控制器中,登录后您可以设置User.current_user = current_user