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