Rails 2.1.0 TimeZone機能(TimeWithZoneクラス)は Marshal に非対応・・・

gem でupdate したら、Rails 2.1.0 になったついでに、開発も 2.1 に移行してみました。
2.1からは、Timezoneをサポートしたということです。
http://mad.ly/2008/04/09/rails-21-time-zone-support-an-overview/


ちょっと期待してたんですが致命的な問題があるようです。

時間をdatetime_selectで入力して、モデルに格納し、それをセッション変数に保存して、次のページに渡すということをしていました。


そしたら、ずれるんです。 時間が。 9時間ほど。


動作を見ていくと、セッションに時間(TimeWithZoneのオブジェクト)を入れると時間がずれます。
どうやらマーシャルすると、「マーシャル前の時間+ローカルのタイムゾーンオフセット」した時間になるようです。



どうみてもバグです。 ほんt(ry


ぐぐってみると、この問題に気づいた方が検証され、自力で修正案を出されていました。http://rails.lighthouseapp.com/projects/8994/tickets/558-timewithzone-fails-to-unmarshal-properly


個人的には、この機能を殺すことで解決することにしました。

# config/environment.rb
# config.time_zone = 'UTC'

config.time_zone をコメントアウトしてやれば、この機能は停止するようです。