2

なんらかの理由で、開発 (ローカル Mac) と本番 (Heroku) で時間が異なって表示されます。見てみましょう: (これを行う直前に を実行したheroku db:pullため、データベースは同一である必要があります)

プロダクション (Heroku)

>> Annotation.last.id
=> 2028
>> Annotation.last.created_at
=> Sat, 12 Sep 2009 06:51:33 UTC +00:00
>> Time.zone
=> #<ActiveSupport::TimeZone:0x2b4972a4e2f0 @tzinfo=#<TZInfo::DataTimezone: Etc/UTC>, @utc_offset=0, @name="UTC">
>> Time.now.zone
=> "PDT"

開発 (私の Macbook Pro)

>> Annotation.last.id
=> 2028
>> Annotation.last.created_at
=> Sat, 12 Sep 2009 09:51:33 UTC +00:00
>> Time.zone
=> #<ActiveSupport::TimeZone:0x23c92c0 @tzinfo=#<TZInfo::DataTimezone: Etc/UTC>, @utc_offset=0, @name="UTC">
>> Time.now.zone
=> "EDT"

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

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

sqlite> Select created_at from annotations where id = 2028;
2009-09-12T09:51:33-04:00
4

5 に答える 5

4

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

Local: {"created_at"=>"2009-10-30 22:34:55.919586"}

Remote: {"created_at"=>"2009-10-31 01:34:55.919586"}

同じ問題、ちょうど 3 時間シフト。タップのソースを調べると、Gem heroku が DB 同期に使用しますが、ここで何がうまくいかないのかについての手がかりはありません。heroku サポート チケットをオープンしました。見つけた内容でこの投稿を更新します。

更新: Heroku の Ricardo と Morten が返信しました。次のように、コマンド ラインで TZ を指定します。

TZ=America/Los_Angeles heroku db:pull
于 2009-11-02T01:25:11.727 に答える
1

DB内の日付が、2つの環境で異なるローカルタイムゾーンに保存されていることを前提としているように見えます。その後、UTCに変換されます。DBの値は基本的に同じであるため、2つの異なるUTC値を取得します。

「config/environment.rb」からのconfig.time_zoneの値は何ですか?また、「id =2028の注釈からcreated_atを選択」の値は何ですか?

于 2009-09-13T14:15:02.023 に答える
0

これは、UTC時間として現地時間を報告しているどちらかが説明できないようです。東部時間はUTCから4時間離れており、太平洋時間は7時間離れていますが、3時間の違いが見られますが、 4時間または7時間の差。

どちらも正しくない出力を生成しているようです。SQLiteは、09:51の時刻は-04:00の時刻、つまり東部標準時であると明確に言っていますが、Railsは、ある場合はUTCであると誤って主張しており、別の場合は、東部から太平洋に変換しています。 、その後、結果がUTCであると誤って主張します。

たぶんこれはActiveRecordのSQLiteバックエンドのバグですか?広く使われているコードにあったとしたら、ずっと前に捕らえられて押しつぶされていたようなもののように見えるからです。

于 2009-09-20T18:34:20.703 に答える
0

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

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

  • システムのタイムゾーン
  • ローカル(ユーザー)プロセスのタイムゾーン
  • データベースシステムのタイムゾーン
  • データベースのローカルタイムゾーン
于 2009-09-18T19:33:31.660 に答える
0

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

RailsコンソールでAnnotation.last.created_atのようなことをすると、結果にはすでにタイムゾーンが適用されています。mysqlコンソールを介して、mysqlの「純粋な」日付を確認する必要があります:-)

于 2009-09-15T12:43:45.970 に答える