我在日志中注意到使用Date.today方法时当前时间的一个非常奇怪的问题。基本上,我有一个cron作业(使用clockwork),每天晚上00:00运行,检查哪些订阅是到期的,以便它尝试自动更新它们。作业执行一个方法,该方法依次执行查询,如下所示:

where("date(active_until) <= ?", Date.today)

大多数情况下,这会正确执行。然而,根据我的日志观察,似乎有时Date.today与实际日期不符。从我的日志中提取:
注意:日期是将来的,因为我正在手动设置时间,以测试此操作是否正确执行。
D, [2016-05-01T00:00:00.015901 #21699] DEBUG -- :   Subscription Load (2.6ms)  SELECT "subscriptions".* FROM "subscriptions" WHERE date(active_until) <= '2016-04-30'

D, [2016-05-02T00:00:00.011130 #21721] DEBUG -- :   Subscription Load (2.2ms)  SELECT "subscriptions".* FROM "subscriptions" WHERE date(active_until) <= '2016-05-02'

如果您查看第一个案例,您将看到该语句是在2016-05-01T00:00:00.015901执行的,而Date.today生成了2016-04-30。第二种情况显然是正确的,因为日志日期对应于date.today。
最大的问题是我不能复制它。我从日志中看到的唯一一件事是,它已经发生了24次中的3次。这里可能有什么问题?Rails是否可能以某种方式缓存查询的输入参数?
我的Ruby版本是:Ruby 2.2.1p85(2015-02-26修订版49769)[x86_64-linux]
我的Rails版本是:4.2.1

最佳答案

确保在config/application.rb文件中,您的时区设置为您正在测试的实际时区:
对于PST,我们使用:
config.time_zone = 'Pacific Time (US & Canada)'
要获取rails可用的时区字符串列表,请运行以下命令:
rake time:zones:all
你也可以给它一个更具体的语言环境。对于美国:
rake time:zones:us

关于ruby-on-rails - Date.today与实际日期不符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35163560/

10-14 09:52