我注意到在我的日誌中使用Date.today
方法的當前時間非常奇怪的問題。基本上,我有一個每天晚上在00:00運行的cron作業(使用發條),以檢查哪些訂閱到期,以便它嘗試自動更新它們。該作業執行一個方法,該方法依次執行查詢,如下所示:Date.today對應於實際日期
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是否有可能將輸入參數緩存到查詢中?
我的紅寶石版本是:紅寶石2.2.1p85(2015年2月26日修訂49769)x86_64的Linux的]
我的Rails的版本是:4.2.1
你試過'Time.zone.today'嗎?這看起來像是一個時區問題。 – Leito
如果確實是一個時區問題,那爲什麼我們沒有一致地看到這種行爲? – tomor
那麼,如果你的時區的偏移量是-5(來自UTC),只要你介於:午夜和晚上7點之間,你就會好起來的,因爲今天會匹配。 – Leito