【问题标题】:activerecord and timezones活动记录和时区
【发布时间】:2013-02-14 01:38:14
【问题描述】:

情况是这样的。我们有一个在 heroku 上运行的 rails 3.2 应用程序,开发人员遍布世界各地。我们希望对所有事物都采用 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 日的午餐时间,并标记为该时间在 UTC。我真正想要的是它查看当地时间,注意我在墨尔本,并通过(在这种情况下)减去 11 小时转换为 UTC。

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    好的,看来这可以为我们解决问题:

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

    我们有点半信半疑,会等着看我们在每个人的时区部署和/或运行我们的测试套件时效果如何,但目前看来,它至少在墨尔本是可行的 ;)

    【讨论】:

    • 您也可以在 Postgres 数据库中设置时区,但我相信您的应用仍然需要您在上面使用的配置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多