ruby-on-rails - Rails Postgres 时区处理

标签 ruby-on-rails postgresql timezone datamapper dm

我想要的简单事情是在数据库中以 UTC 格式存储 DateTime 并再次以 UTC 格式检索它,但 Rails 似乎假设我将 DateTime 存储在本地时区并添加了 8 小时差异 (PST)。我的模型中有一个 DateTime 字段。如果我发送一个请求 (PUT) 来更新我模型的特定实例中的这个字段,无论出于何种原因,时区都会以某种方式混淆:

通过 PUT 发送到 rails:2012-02-17T03:46:58Z

通过后续 GET 返回:2012-02-17T11:46:58Z

时差恰好是 8 小时,可以用我的时区 PST (-08:00) 来解释。

我在 Rails 3.1.3 上使用 Datamapper 1.2。

我将我的应用程序配置时区明确设置为 UTC。

我还尝试使用 dm-zone-types。没有为我改变任何东西。

我的 repo 上的 git-bisect 显示,当我将数据库从原始 sqlite 切换到 postgres 时,引入了这种不当行为。此提交仅更改了 database.yml 和 gemfile。没有别的。

有什么想法吗?

最佳答案

我自己找到了一个 hacky 解决方案:

将环境变量 TZ 中的服务器时区设置为“UTC”。为了持久化这个配置选项,我决定把环境变量设置放在config/boot.rb中:

ENV['TZ'] = "UTC"

我仍然觉得很脏,这个解决方案仍然让我感到不安。因此,我们非常感谢任何更好/更清洁的解决方案!

关于ruby-on-rails - Rails Postgres 时区处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9308471/

相关文章:

sql - 查询特定 id 时按顺序查找上一行/下一行

sql - 如何查询使用索引的 postgreSQL 表?

ruby-on-rails - 让用户输入Python代码并在Rails网站上运行

ruby-on-rails - 模拟has_many :through with Mongoid

sql - 获取所有已标记为属于用户的任何兴趣的帖子

sql - 使用 PL/pgSQL 数组时出现查询错误

mysql - Ruby on Rails 数据库迁移不在 MySQL 表中创建外键

Java System.getProperty( "user.timezone") 不起作用

timezone - Flot.js + Rails 应用程序中 x 轴的用户指定时区

ruby-on-rails - ActiveSupport::TimeZone 偏移量字符串列表