在rails应用程序中,我们的环境文件中将时区设置为UTC。当在我们的生产或暂存服务器上运行时,这不会造成任何问题。然而,我们的本地开发机器都没有在系统时钟中设置为UTC,这导致在比较日期时出现一些测试失败。这是因为当我们调用DateTime.now
时,Rails使用UTC,其中MySQL数据库使用系统时间(在我的例子中是CST)。
有没有办法确保在某些情况下,DateTime.now
不使用UTC时区?我想我想要的是一种纯粹的SQL更新日期字段的方式,它绕过了Rails引擎。
实际上,通过将本地设置添加到相应的config/environments
文件中,您应该能够告诉rails只对development
和其他环境(如test
)使用本地设置:
config.time_zone = "Eastern Time (US & Canada)" #Change this
config.active_record.time_zone_aware_attributes = false
config.active_record.default_timezone = :local
这对我来说很有效,但我把包括制作在内的一切都调到了当地时间。但我没有;我不明白为什么这种方法不适合每个环境!