我在日志中注意到使用Date.today
方法时当前时间的一个非常奇怪的问题。基本上,我有一个cron作业(使用发条)每晚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
答案 0 :(得分:0)
确保在config/application.rb
文件中将您的计时区设置为您正在测试的实际时区:
对于PST,我们使用:
config.time_zone = 'Pacific Time (US & Canada)'
要获取rails可用的时区字符串列表,请运行以下命令:
rake time:zones:all
您还可以为其提供更具体的区域设置。对于美国:
rake time:zones:us
答案 1 :(得分:-1)
由于这种情况发生在午夜左右,我认为这是一个计时问题,在生成条目的脚本执行完毕后,日志文件会稍微更新。 可能与负载相关,因为日志记录工具与发送日志条目的脚本是分开的。