この記事はアピリッツの技術ブログ「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時代と設定が変わっていないような…。
もっと良い方法があるかもしれません。