Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 模型的datetime字段在heroku上的存储方式与本地主机不同_Ruby On Rails_Postgresql_Heroku_Timezone_Ruby On Rails 3.2 - Fatal编程技术网

Ruby on rails 模型的datetime字段在heroku上的存储方式与本地主机不同

Ruby on rails 模型的datetime字段在heroku上的存储方式与本地主机不同,ruby-on-rails,postgresql,heroku,timezone,ruby-on-rails-3.2,Ruby On Rails,Postgresql,Heroku,Timezone,Ruby On Rails 3.2,步骤: 在本地主机服务器上,我选择位于太平洋时区的浏览器中的时间2013年1月18日上午10时至11时。然后在heroku上的生产服务器上选择完全相同的时间 正如您所看到的,保存到数据库中的内容的输出是不同的。我希望在将时间存储为UTC时,生产系统表现为本地主机,并考虑时区。这是什么原因造成的?heroku服务器在EST中,但这并不能解释这种行为 控制器: 输出本地主机: 2013年1月18日星期五10:00:00 GMT-0800 PST 2013-01-18 18:00:00 UTC 产量和

步骤:

在本地主机服务器上,我选择位于太平洋时区的浏览器中的时间2013年1月18日上午10时至11时。然后在heroku上的生产服务器上选择完全相同的时间

正如您所看到的,保存到数据库中的内容的输出是不同的。我希望在将时间存储为UTC时,生产系统表现为本地主机,并考虑时区。这是什么原因造成的?heroku服务器在EST中,但这并不能解释这种行为

控制器:

输出本地主机:

2013年1月18日星期五10:00:00 GMT-0800 PST

2013-01-18 18:00:00 UTC

产量和产量:

2013年1月18日星期五10:00:00 GMT-0800 PST

2013-01-18 10:00:00 UTC

模式:

环境:

RubyonRails 3.2.11

Ruby 1.9.3

Postgres

PostgreSQL如何处理日期/时间的背景 我认为您的问题已包含在另一个SO问题的答案中:

具体来说,这个答案是:

将此查询用于UTC格式的时间:

使用此查询查询本地时区中的时间:

SELECT * FROM tbl WHERE time_col > now()::time
Rails&ActiveRecords&日期/时间 本期还讨论了:

有一条评论说:

@deathbob很抱歉回复太晚-的可接受值
config.active\u record.default\u时区为:utc或:local。如果 您将其设置为:utc以外的其他值,它将假定为:local,那又怎样 你看到的是预期的行为

要在ActiveRecords中固定时间,使其始终作为UTC处理,可以设置以下变量:

config.active_record.default_timezone = :utc

@slm of config.active\u record.default\u timezone=:utc的解决方案对我不起作用。Rails仍在Heroku上与local一起编写,与UTC一起阅读

于是我试着:

config.time_zone = 'Sydney'
config.active_record.default_timezone = :local
它在开发过程中仍然可以正常工作,但是现在可以从Heroku上的postgres中以UTC格式读取datetime值

我的临时解决方案是在Heroku上设置默认时区:

heroku config:add TZ="Australia/Sydney"

这只是一个临时解决方案,因为我希望我的应用程序使用UTC。我已经发布到@slm提到的rails/github问题上进行澄清。当我找到一个更具体的解决方案时,我会更新我的答案。

你在config/application.rb中的时区配置是什么?@ThongKuah我已经把它注释掉了,注释说它是UTC,因为默认情况下它是UTC。嘿,John,“这是否与我以前在Heroku身上见过奇怪的tz问题有关呢?”Saran不知道这个答案的答案。它似乎更多地与日志记录时间有关。@John run\d Heroku和localhost中的\u表?你有没有没有没有时区的时间戳作为你的postgres日期类型?对不起,我当时不在城里,直到现在才知道。我认为你的答案是对的,但我还是有点困惑。是否有activerecord解决方案?我不使用续集。您提供的两个SQL查询是selects查询,但我最关心的是正确插入日期时间。谢谢config.active\u record.default\u时区=:utc
config.active_record.default_timezone = :utc
config.time_zone = 'Sydney'
config.active_record.default_timezone = :local
heroku config:add TZ="Australia/Sydney"