2


2

どういうわけか開発(私の地元のMac)とプロダクション(Heroku)では時代が違うように見えます。 見てみましょう:(これをする直前に私は `heroku db:pull`をしました、それでデータベースは同一であるべきです)

プロダクション(Heroku)

>> Annotation.last.id
=> 2028年
>> Annotation.last.created_at
=> 2009年9月12日(土)06:51:33 UTC 00:00
>>タイムゾーン
=> #、@ utc_offset = 0、@ name = "UTC">
>>タイムゾーン
=> "PDT"

開発(私のMacBook Pro)

>> Annotation.last.id
=> 2028年
>> Annotation.last.created_at
=> 2009年9月12日(土)09:51:33 UTC 00:00
>>タイムゾーン
=> #、@ utc_offset = 0、@ name = "UTC">
>>タイムゾーン
=> "EDT"

`created_at`の時間は3時間違うので、これはEDTとPDTの3時間の違いに関連していると思いますが、何が起こっているのかはわかりません。

*編集:*生データは次のようになります。

sqlite> id = 2028のアノテーションからcreated_atを選択します。 2009-09-12T09:51:33-04:00

5 Answer


4


Herokuとあなたの開発マシンの間でデータベースを移動するとき、これが問題のようです。 SQLクエリを直接実行すると、次のようになります。

ローカル:{"created_at" => "2009-10-30 22:34:55.919586"}

リモート:{"created_at" => "2009-10-31 01:34:55.919586"}

同じ問題、ちょうど3時間シフト。 Tapsのソースを調べてみると、Gem herokuがDBの同期に使用しているものは、ここで何が悪くなるのかについての手掛かりを提供していません。 私はherokuサポートチケットをオープンしました、そして私は私が見つけたものでこの記事を更新します。

更新:HerokuのRicardoとMortenは答えた。 次のようにコマンドラインでTZを指定してください。

TZ =アメリカ/ LosAngeles heroku db:プル


1


DB内の日付は、2つの環境では異なるローカルタイムゾーンに格納されていると仮定し、それをUTCに変換します。 DBの値は基本的に同じなので、2つの異なるUTC値が得られます。

あなたの "config / environment.rb"からのconfig.time_zoneの値は何ですか? また、「id = 2028のアノテーションからcreated_atを選択」の値は何ですか?


0


これも私が以前に遭遇した問題です。

レールコンソールでAnnotation.last.created_atのようなことをした場合、結果はすでにタイムゾーンが適用されています。 mysqlのコンソールから、mysqlの "純粋な"日付を確認してください。


0


おそらく、一方または両方のマシンで、システム時刻設定がUTCではなくローカルタイムゾーンに設定されています。 その場合、UTC時間(int)が実際にどのような値であるかについて混乱しているでしょう。

両方のマシンをチェックする領域がいくつかあります。

  • システムタイムゾーン

  • ローカル(ユーザー)プロセスのタイムゾーン

  • データベースシステムのタイムゾーン

  • データベースローカルタイムゾーン


0


これは、現地時間をUTC時間として報告するものでは説明できないようです。東部標準時はUTCから4時間、太平洋標準時は7時間ですが、3時間の違いはありません。 4時間または7時間の違い

どちらも誤った出力を生成しているようです。 SQLiteは、09:51の時間は-04:00の時間になるはずであると明確に言っています。 東部時間ですが、Railsは、ある場合にはUTCだと間違って主張しています - そして別の場合には、それを東から太平洋に変換しています。

多分これはActiveRecordのためのSQLiteバックエンドのバグですか? 広く使用されているコードに含まれているのであれば、それはずっと前に捕らえられて窮地に立たされたであろう種類のもののように思えるからです。