1

私が望む簡単なことは、DateTimeをUTCでデータベースに保存し、UTCで再度取得することですが、Railsは、DateTimeをローカルタイムゾーンに保存し、8時間の差(PST)を追加すると想定しているようです。モデルに DateTime フィールドがあります。モデルの特定のインスタンスでこのフィールドを更新するリクエスト (PUT) を送信すると、何らかの理由でタイムゾーンが混同されます。

PUT 経由でレールに送信: 2012-02-17T03:46:58Z

後続の GET で返される: 2012-02-17T11:46:58Z

時差は正確に 8 時間であり、PST (-08:00) である私のタイムゾーンによって説明できます。

Rails 3.1.3 で Datamapper 1.2 を使用しています。

アプリケーション構成のタイムゾーンを UTC に明示的に設定しました。

dm-zone-types も使用しようとしました。私にとっては何も変わりませんでした。

私のレポのgit-bisectは、データベースを元のsqliteからpostgresに切り替えたときに、この誤動作が導入されたことを明らかにしました。このコミットは、database.yml と gemfile のみを変更しました。他には何もありません。

何か案は?

4

1 に答える 1

2

私はハッキーな解決策を自分で見つけました:

環境変数 TZ のサーバーのタイムゾーンを「UTC」に設定します。この構成オプションを永続化するために、環境変数の設定を config/boot.rb に入れることにしました。

ENV['TZ'] = "UTC"

私はまだ汚いと感じており、この解決策はまだ私にウィリーを与えてくれます. したがって、より優れた/よりクリーンなソリューションは高く評価されます!

于 2012-02-16T19:12:30.317 に答える