【问题标题】:Setting Time.zone during a request: Thread Safe?在请求期间设置 Time.zone:线程安全?
【发布时间】:2013-03-16 16:25:12
【问题描述】:

我想让我的应用程序的用户指定一个时区,然后在每个请求开始时设置他们的时区。在 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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2022-11-16
      • 2013-11-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      相关资源
      最近更新 更多