Rails中的时区怪异

这是一个非常奇怪的Rails问题 – 我已经google了一下,看看这是否与已知的bug有关,但是没有找到任何东西 – 对于有用的链接以及解决方案来说都是无用的。

我可以将问题归结为:

如果我启动我的Rails应用程序,并通过HTTP请求执行以下Rails代码。

Time.zone = 'Europe/London' logger.info Time.zone.inspect 

日志显示为时区

 # 

在下一个请求(以及大多数后续请求)中,相同代码行的日志显示了这一点

 #<ActiveSupport::TimeZone:0x46cc100 @tzinfo=#, @name="Europe/London", @utc_offset=nil> 

谁知道到底发生了什么?

(如果有帮助,我正在运行Rails 2.3.2)

编辑:似乎Rails 2.2.2没有这个问题,所以我现在将恢复原状。

ActiveSupport :: TimeZone正在拦截Time.zone,以便可以对其进行pickle和恢复。 由于某些原因,这是懒惰的(这就是为什么你的更改不会立即显示)。 这里有交叉会话和multithreading问题,我不知道它的权利。 我只能说:

  • 你所看到的真的正在发生
  • 它正在发生,因为它以这种方式编码
  • 有关于解决这个问题的公开TODO项目
  • (至少对我来说)不清楚全球“正确”行为应该是什么。

这种特性的基本问题是没有明确的方法可以从setter中识别应用程序员的意图范围。 这是一个网站范围的设置吗? 会话范围设置? 一个过时的幻想?

在约定优于配置范例中,这样的事情需要一个约定来解决它们,而这个领域还没有得到它。