2012-02-16 9 views
1

私がほしいと思う簡単なことは、データベースにUTCでDateTimeを保存してUTCでそれを再度取得することですが、レールは私のローカルタイムゾーンにDateTimeを保存し、 (PST)。私はモデルにDateTimeフィールドを持っています。Rails Postgresタイムゾーンの処理

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

私がリクエストを送信した場合は何らかの形で何らかの理由でごちゃ混ぜタイムゾーン、私のモデルの特定のインスタンスでこのフィールドを更新する(PUT)

GET:2012-02-17T11:46:58Z

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

私はDatamapper 1.2 on Rails 3.1.3を使用しています。

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

また、dm-zone-typeを使用しようとしました。私のために何も変えなかった。

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

アイデア?

+0

あなたのPostgresデータベースを見て、あなたのdatetimeフィールドの生のデータベース値は何ですか? –

+0

私はまったく同じ問題を抱えています(今は 'dm-zone-types'を使っています)。私はDatamapper 1.2とdm-zone-types 0.3を使ってSinatraにいます。時刻は(zoned_time.rbの "dump"メソッドからの戻り値に従って)UTCとして保存されているようですが、取得した後、タイムゾーンが誤った時刻のローカルゾーンになります。 POST:2012-02-16 11:25:52 +0100、 "CET"データベースの価値:2012-02-16 10:25:52 +0000、 "UTC" GET:2012-02-16 10:25:52 +0100、 "CET" –

+0

データベースの生の値は "2012-02-17 03:46:58"です。それがUTCの時間と私が受けたいと思う価値です。データベースから値を引き出してクライアントに送るまでの間、レールは私がかなり理解できないトリッキーなことをするようです。あなたのご意見ありがとうございます! – kaihowl

答えて

2

私はハックソリューションを自分で発見した:

は、環境変数TZ「UTC」にして、サーバのタイムゾーンを設定します。この設定オプションを持続するためには、私は設定/ boot.rbで環境変数の設定を置くことにしました:

ENV['TZ'] = "UTC" 

が、私はまだ汚い感じ、この解決策はまだ私にウィリーズを与えます。だから、より良い/清潔なソリューションは非常に高く評価されます!

関連する問題