在我们的多租户Rails 4.2应用程序中,我们希望为
User
模型定义一个线程本地的current_token
,并打算在整个应用程序中使用它。以下是current_token
的定义方式:class User < ActiveRecord::Base
def self.current_token=(token)
Thread.current['current_token'] = token
end
def self.current_token
Thread.current['current_token']
end
end
令牌可以通过 User.current_token
获取。在用户会话的整个生命周期中,保持 User.current_token
线程安全并活跃非常重要。需要注意的是,一些 Web 服务器(例如 puma
)可能会清除线程本地。我们希望从社区获得反馈,了解线程本地在实际生产中的可靠性。我们应该注意哪些问题(如果有解决方案,则提供可能的解决方案)。
before_action
中清除并重置thread.current
,并在after_action
中清除它,是否可以消除风险? - user938363