woshidan's loose leaf

ぼんやり勉強しています

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_zoneJSTだった
    • @@global.time_zoneSET GLOBAL time_zone = '+0:00';のように変更してもActiveRecordにしまわれる時間やTime.nowの結果は変わらなかった
    • ActiveRecordを通して時刻をしまう時は、変換が行われているのかも
  • Time.new / Time.now のタイムスタンプはOSの設定を見ている
    • OSの時刻をMacの時間帯の設定でイギリスにしたら、設定画面に夏時間ってついてて、Time.nowのTimestampのところの時差、+1になってた
    • Time.newは具体的に時間を指定するとサマータイムっぽいのは無くなってた
  • 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のように指定する(参考)

作業ログ。

gist.github.com

MySQLのTimeZoneをJSTからUTCに変更する - Qiita

については、他のmy.cnfが置いてあるのか、うまく動作しなかった。

そのほかメモ

Linuxコマンド集 - 【 find 】 ファイルやディレクトリを検索する:ITpro