【发布时间】:2018-09-27 05:17:38
【问题描述】:
我的应用时区设置为太平洋。
# application.rb:
config.time_zone = 'Pacific Time (US & Canada)'
我的生产服务器时间设置为太平洋。但是 ActiveRecord 将每个会话的 postgres 时区设置为“UTC”:
[1] pry(main)> ActiveRecord::Base.connection.execute("show timezone").getvalue(0,0)
(0.2ms) show timezone
=> "UTC"
docs 说我对config.active_record.default_timezone 的唯一选择是:utc 和:local
使用:local 可以用于生产,但我的开发服务器位于不同的时区。
我知道通常建议将所有时区设置保留为默认 UTC,但我的应用程序将 postgres 的时间和日期函数广泛用于 ETL 作业、复杂的数据分析查询等。我宁愿让 postgres 成为我的“单一来源”真理”比rails / ruby,所以我对告诉我在UTC做所有事情的答案不感兴趣
编辑:我已经确认 config.time_zone 设置正确:
[6] pry(main)> Rails.application.config.time_zone
=> "Pacific Time (US & Canada)"
并且config.active_record.default_timezone 设置为:local
[9] pry(main)> Rails.application.config.active_record.default_timezone
=> :local
在同一个撬动会话中:
[10] pry(main)> ActiveRecord::Base.connection.execute("show timezone").getvalue(0,0)
(0.2ms) show timezone
=> "Asia/Bangkok"
【问题讨论】:
-
乍一看它是系统本地的,但看起来from reading,它可能是应用程序本地的。您是否已验证 config.timezone 到正确的区域,而 default_timezone 到 :local 实际上不起作用,与系统时区无关?我怀疑会的。我们经常这样做,但系统时间通常也设置为首选时区。
-
@BradWerth 我添加了一个编辑以显示两个配置变量都已设置。谢谢
标签: ruby-on-rails postgresql rails-activerecord