这是一个非常奇怪的Rails问题 - 我已经google了一下,看看这是否与已知的bug有关,但是没有找到任何东西 - 对于有用的链接以及解决方案来说都是无用的。
我可以将问题归结为:
如果我启动我的Rails应用程序,并通过HTTP请求执行以下Rails代码。
Time.zone = 'Europe/London'
logger.info Time.zone.inspect
日志将此显示为时区
#<ActiveSupport::TimeZone:0x3d7438c @tzinfo=nil, @name="UTC", @utc_offset=0>
在下一个请求(以及大多数后续请求)中,相同代码行的日志显示此
#<ActiveSupport::TimeZone:0x46cc100 @tzinfo=#<TZInfo::DataTimezone: Europe/London>, @name="Europe/London", @utc_offset=nil>
任何人都知道到底发生了什么事?
(如果有帮助,我正在运行Rails 2.3.2)
编辑:看起来Rails 2.2.2没有这个问题,所以我现在将恢复原状。
答案 0 :(得分:4)
ActiveSupport::TimeZone正在拦截Time.zone,以便可以对其进行腌制和恢复。由于某种原因,这是懒惰的(这就是为什么你的更改不会立即显示)。这里有交叉会话和多线程问题,我不知道它的权利。我只能说:
这种功能的基本问题是没有明确的方法可以从setter中识别应用程序员的意图范围。这是一个网站范围的设置吗?会话范围设置?过时的幻想?
在约定优于配置范例中,这样的事情需要一个约定来解决它们,而这个领域还没有得到它。