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中识别应用程序员的意图范围。 这是一个网站范围的设置吗? 会话范围设置? 一个过时的幻想?
在约定优于配置范例中,这样的事情需要一个约定来解决它们,而这个领域还没有得到它。