ホーム 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時代と設定が変わっていないような…。
もっと良い方法があるかもしれません。

記事を共有

最近人気な記事