在Rails中将Thread.current与Unicorn一起使用是否安全?

时间:2018-10-09 03:47:25

标签: ruby-on-rails multithreading unicorn

我需要在模型代码中获取当前的登录用户名,但是我不想添加需要许多更改的新附加参数。因此,我在考虑将登录用户名放在Thread.current中,然后在模型代码中访问它是否可行。 只需尝试一下即可使用,但是例如,我担心它是否可以与独角兽多工一起正常使用  -登录请求由工作程序1处理,而第二个请求则由工作程序2处理。我的基本理解是应该没问题,因为我将会话从会话设置为ApplicationController中的Thread.current,然后才应在开始执行过滤器每个请求。  -如果独角兽工作者因任何原因被杀并重新启动,请求是否将重新启动,并且仍然具有会话数据? 我对独角兽没有足够的了解...所以这可能是一个幼稚的问题...

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

在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您不必直接使用线程,可以使用https://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