Date.todayをtravel_toのブロックで使ったら他の部分のテストがこけた
テストで
travel_to Date.today + 3.days { create(:model, some_date: Date.today) }
とやったら、他の部分のActiveRecordの保存時刻がずれてテストがこけて原因が分からず大変だったので、あれこれ確認してみた。
結局原因はよく分からなかったけど、上の書き方を止めたら直ったので、何なんだろう...。
大体ここに書いてある事の部分的な確認した。
http://qiita.com/joker1007/items/2c277cca5bd50e4cce5e
- OSの時刻をいじっても、MySQLの
@@global.system_time_zone
はJSTだった@@global.time_zone
をSET GLOBAL time_zone = '+0:00';
のように変更してもActiveRecordにしまわれる時間やTime.nowの結果は変わらなかった- ActiveRecordを通して時刻をしまう時は、変換が行われているのかも
- Time.new / Time.now のタイムスタンプはOSの設定を見ている
- Time.currentはOSの時刻をいじっても、MySQLの時刻をいじっても、時差らしい変化は無かった
- OSの時刻設定が10分ずれてたときは10分ずれてたので、これは、OSの設定では地域と時差がセットに設定してあるからかも
mysqlに関するメモ
- system_time_zone はOSの時刻を見に行く仕様で読み取り専用。
SET GLOBAL ...
のような感じで変更できない- time_zoneを変更しても、ActiveRecordの時刻があまり変更されなかったのはtime_zoneは読んでいるのかな...?
- LINUX系(?)のmysqldの再起動は
service mysqld restart
- UNIX系(?)のmysqldの再起動は
mysql.server reload
- my.cnfの優先順位
- time_zoneはUTCからのoffsetで
+10:00
,-06:00
のように指定する(参考)
作業ログ。
MySQLのTimeZoneをJSTからUTCに変更する - Qiita
については、他のmy.cnfが置いてあるのか、うまく動作しなかった。