2

这是情况。我们有一个在 heroku 上运行的 rails 3.2 应用程序,开发人员遍布世界各地。我们希望对所有事物都采用 UTC 标准化。我们的团队甚至在我们自己之间也使用 UTC(例如,在计划会议时间时)。我们希望应用程序也能做到这一点。我们可以将事物转换回人们的本地时区,以便稍后显示。

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

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

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。我真正想要的是它查看当地时间,注意我在墨尔本,并通过(在这种情况下)减去 11 小时转换为 UTC。

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

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

(我认为将 config.time_zone 更改为 'Australia/Melbourne' 会解决这个问题?可能吗?)

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

4

1 回答 1

2

好的,所以看起来这为我们修复了它:

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

我们有点怀疑,并且会等着看我们在每个人的时区部署和/或运行我们的测试套件时情况如何,但现在它似乎工作......至少在墨尔本;)

于 2013-02-14T01:50:43.560 回答