Rails(2.1.0)のtimezone

Rails(2.2.2)が11/21にリリースされたのはわかっていますし、インストールも終わっているんですが、Rails(2.1.0)の話です。

timezone

config/environment.rbというファイルに config.time_zoneという指定があって、これを'Tokyo'にすると幸せが来そうな感じがするじゃないですか。しませんか?

config.time_zone = 'Tokyo'

config/environment.rb

で、やってみたわけです。そうすると確かに日本のローカルタイムになって、OK、OKというわけなんですが、MySQLの DBの中を見てあらびっくり。DBに書かれている DateTimeは UTCのままです。ググってみると、これだけじゃ足りないと。

config.time_zone = 'Tokyo'
config.active_record.default_timezone = 'Tokyo'

config/environment.rb

これもいるよと。ふーーんですね。で、DBみたらちゃんと Tokyoローカルになってたので安心したんですが、ちょっと待てよと。created_atとか updated_atなんかはちゃんとローカルだけと、activated_atはまだ UTCだ。

認証系

認証系のプラグインとして、restful-authenticationとか aasmを使っているんですけど、このなかの日付は「Time.now.utc」決め打ちになっていて、time_zoneには関係ないよと。ま、プラグインのなかで閉じてる分には UTC決め打ちの方が間違いがなくていいんだろうけど、いつアクティベートしたかを表示したくなることだってあるかもしれないし。いちいち、これは認証系だから UTCから Localへ変換して、とかやってるといつか間違いそうだし、どうすべぇか。
ということで、プラグインに手を入れて、'.utc'を全部取っちゃおうと思ったんですけど、10箇所くらい変更するところがあって、なんかいやーな感じがしたのでいったん変更したのを戻してしまいました。

結論

#config.time_zone = 'Tokyo'
#config.active_record.default_timezone = 'Tokyo'

config/environment.rb

time_zoneの指定をしないと DBを含めて、デフォルトでローカルタイムになるので、なにも指定しないこと。
認証系は UTCだということを忘れないようにして、activated_atや remember_token_expires_atを使うときはローカルに変換してから使うこと。