2

これが状況です。heroku で実行されている Rails 3.2 アプリと、世界中の開発者がいます。すべてを UTC で標準化したいと考えています。私たちのチームは、私たちの間でも UTC を話します (例: 会議時間を計画するとき)。アプリにも同じことをさせたいと思っています。後で表示するために、物事を人々のローカルタイムゾーンに戻すことができます。

問題は、データベースに何かを保存するとき (たとえば、フォーラムで新しい投稿を作成するとき) に、ローカル時間 (コンピューターによって報告される) が UTC であると見なされ、そのように保存されることです。

たとえば、ここオーストラリアの晴れたメルボルン (UTC+11) の 2 月 14 日木曜日のランチタイムです。新しい投稿を作成してから、コンソールを確認します。

1.9.3p194 :009 > p = Post.first
 => #<Post id: 12, author_id: 1, subject: "Another post ", body: "a very recent one!", created_at: "2013-02-14 12:13:53", updated_at: "2013-02-14 12:13:53", slug: "test1-20130214-another-post", forum_id: 1> 
1.9.3p194 :010 > p.created_at
 => Thu, 14 Feb 2013 12:13:53 UTC +00:00 

ご覧のとおり、created_at タイムスタンプは 14 日のランチタイムとして保存され、その時刻IN UTCとしてフラグが立てられます。私が実際に望んでいるのは、現地時間を見て、私がメルボルンにいることを認識し、(この場合は) 11 時間を引いて UTC に変換することです。

これで、config/application.rb で次の行を編集できることがわかりました。

config.time_zone = 'UTC'
config.active_record.default_timezone = 'UTC'

(config.time_zone を「Australia/Melbourne」に変更すると修正されると思いますか?おそらく?)

ただし、そのいずれかを「オーストラリア/メルボルン」(またはその他) に変更すると、(Heroku に) デプロイされたアプリと、メリーランド、オレゴン、グラスゴーの共同開発者はどうなりますか? 時間を個別に設定する必要がありますか? おそらく、環境変数を介して行う必要がありますか? 他の提案はありますか?

4

1 に答える 1

2

OK、これで問題が解決したようです:

config.time_zone = 'UTC'
config.active_record.default_timezone = :local

私たちは少し懐疑的で、みんなのタイムゾーンでテスト スイートを展開および/または実行したときにどうなるかを待ちますが、今のところうまくいくようです...少なくともメルボルンでは;)

于 2013-02-14T01:50:43.560 に答える