ruby-on-rails - 在请求 : Thread Safe? 期间设置 Time.zone

标签 ruby-on-rails ruby-on-rails-3.2 thread-safety singleton

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

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

这安全吗?或者我是否有一个线程影响另一个线程的风险?我将尝试对此进行测试,但这不是有史以来最简单的测试场景,所以我想我应该看看是否有人已经这样做了。

最佳答案

如果你看 code在实现这一点的地方,您可以看到当前区域存储在线程局部变量中,因此每个线程都可以设置 Time.zone 而不会干扰其他线程。

关于ruby-on-rails - 在请求 : Thread Safe? 期间设置 Time.zone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15451637/

相关文章:

ruby-on-rails - PostgreSQL:按多个列权重排序

c# - List<T>.AddRange() 线程安全吗?

c# - 使用 Session 线程安全吗?

ruby-on-rails - 无法运行 rake db :migrate

ruby-on-rails - 如何使用rails渲染远程文件

javascript - AngularJS 和 ui-router - templateUrl 不工作

ruby-on-rails - 如何确保 counter_cache 在 Rails 单元测试中正确更新?

ruby-on-rails - 在不重启 rails 服务器的情况下更新 Assets

ruby-on-rails - ruby 包安装需要 : no such files to load error

java - Java反射中的构造函数类线程安全