Ruby on rails 在请求期间设置时区:线程安全?

Ruby on rails 在请求期间设置时区:线程安全?,ruby-on-rails,ruby-on-rails-3.2,thread-safety,singleton,Ruby On Rails,Ruby On Rails 3.2,Thread Safety,Singleton,我想让我的应用程序的用户指定一个时区,然后在每个请求开始时设置他们的时区。在Rails、AFAICT中,这是通过设置singleton对象来完成的: Time.zone = "America/Los_Angeles" 我对最佳实践的理解是,一般来说,一个单例应该设置一次。例如,在应用程序配置中 根据对类似问题的回答,有人建议在ApplicationController中设置它 class ApplicationController < ActionController::Base b

我想让我的应用程序的用户指定一个时区,然后在每个请求开始时设置他们的时区。在Rails、AFAICT中,这是通过设置singleton对象来完成的:

Time.zone = "America/Los_Angeles"
我对最佳实践的理解是,一般来说,一个单例应该设置一次。例如,在应用程序配置中

根据对类似问题的回答,有人建议在ApplicationController中设置它

class ApplicationController < ActionController::Base
  before_filter :set_timezone
  def set_timezone
    # current_user.time_zone #=> 'London'
    Time.zone = current_user.time_zone if current_user && current_user.time_zone
  end
end
class ApplicationController“伦敦”
Time.zone=当前用户。如果当前用户和当前用户,则为时区。时区
结束
结束
这安全吗?或者我是否有让一个线程影响另一个线程的风险?我将尝试运行此测试,但这不是最简单的测试场景,所以我想我应该看看是否有人已经这样做了。

如果查看实现此操作的位置,可以看到当前区域存储在线程局部变量中,因此每个线程都可以设置Time.zone,而不会干扰其他线程