その他
    ホーム 技術発信 DoRuby Rails2にバージョンアップしたらcreated_atが世界標準時刻になってました

    Rails2にバージョンアップしたらcreated_atが世界標準時刻になってました

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    Rails2.3にバージョンアップし、ふとDB内のレコードの作成時刻を見てみたところ、実際の作成時と9時間のずれがありました。
    UTCが適応されているみたいでした。

    UTCのままですと分かりずらかったりもしますので、日本時間に合わせてみます。

    ググってみたところ、config/enviroment.rb内を以下のように修正してみてとありました。
    ちなみにDBはpostgresです。
    修正前:config.time_zone = ‘UTC’
    修正後:config.time_zone = ‘Tokyo’
    結果:(現在時刻:14:34)>> Entry.create({:title=>’test’, :body=>’hello world’})
    => #<Entry id: 7, body: “hello world”, title: “test”, created_at: “2009-06-02 05:34:55”, updated_at: “2009-06-02 05:34:55”>
    >> Entry.find(7).created_at
    => Tue, 02 Jun 2009 14:34:55 JST +09:00

    登録したときにUTCなのが気になります。DBをのぞいてみたところ、UTCで保存されていました。test_dev=# select id, title, created_at from entries where id=7;
     id | title |         created_at         
    —-+——-+—————————-
      7 | test  | 2009-06-02 05:34:55.273476

    ググってみたところ、↓のも追加してねとありました。config.active_record.default_timezone = ‘Tokyo’
    修正後結果:(現在時刻:14:38)>> Entry.create({:title=>’test’, :body=>’hello world’})
    => #<Entry id: 8, body: “hello world”, title: “test”, created_at: “2009-06-02 14:38:34”, updated_at: “2009-06-02 14:38:34”>
    DB内:test_dev=# select id, title, created_at from entries where id=8;
     id | title |        created_at         
    —-+——-+—————————
      8 | test  | 2009-06-02 14:38:34.34017

    上手くいきました。 ばんざーい。
    取り出してみました。>> Entry.find(8).created_at
    => Tue, 02 Jun 2009 23:38:34 JST +09:00

    …だめでした。 日本時間+9時間されました。
    config.time_zone = ‘Tokyo’ をコメントアウトしてみます。#config.time_zone = ‘Tokyo’
    >> Entry.find(8).created_at
    => Tue, 02 Jun 2009 14:38:34 +0000

    これでよさげです。
    しかしこれだとRails1.0時代と設定が変わっていないような…。
    もっと良い方法があるかもしれません。