activerecord和timezones

时间:2013-02-14 01:38:14

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 timezone rails-activerecord

这是情况。我们在heroku上运行了一个rails 3.2 app,以及全世界的开发人员。我们希望将UTC标准化为一切。我们的团队甚至在我们自己之间讲UTC(例如,在计划会议时间时)。我们希望应用程序也这样做。我们可以将事物转换回人们的本地时区,以便稍后显示。

问题在于,当我将某些内容保存到数据库中时(例如,在论坛中创建新帖子),它认为我的本地时间(由我的计算机报告)是UTC,并保存为原样。

例如,它是2月14日星期四午餐时间在澳大利亚阳光明媚的墨尔本(UTC + 11)。我发了一个新帖子,然后在控制台中查看:

1.9.3p194 :009 > p = Post.first
 => #<Post id: 12, author_id: 1, subject: "Another post ", body: "a very recent one!", created_at: "2013-02-14 12:13:53", updated_at: "2013-02-14 12:13:53", slug: "test1-20130214-another-post", forum_id: 1> 
1.9.3p194 :010 > p.created_at
 => Thu, 14 Feb 2013 12:13:53 UTC +00:00 

如您所见,created_at时间戳按照14日午餐时间保存,并标记为 IN UTC 时间。我真正想要的是看当地时间,请注意我在墨尔本,并通过(在这种情况下)转换为UTC减去11个小时。

现在,我知道我可以在config / application.rb中编辑这些行:

config.time_zone = 'UTC'
config.active_record.default_timezone = 'UTC'

(我认为将config.time_zone改为'澳大利亚/墨尔本'会修复它吗?可能吗?)

但是,如果我将其中任何一个更改为“澳大利亚/墨尔本”(或其他),那么我们部署的应用程序(在Heroku上)以及我在马里兰州,俄勒冈州和格拉斯哥的联合开发人员会发生什么?我们都必须单独设定时间吗?我们应该通过环境变量来做吗?还有其他建议吗?

1 个答案:

答案 0 :(得分:2)

好的,所以看起来这样可以解决它:

config.time_zone = 'UTC'
config.active_record.default_timezone = :local

我们有点怀疑并会等待,看看当我们在每个人的时区部署和/或运行我们的测试套件时它会如何发展,但现在它看起来似乎有效......至少在墨尔本;)