14

アプリのユーザーがタイム ゾーンを指定できるようにし、各リクエストの開始時にタイム ゾーンを設定できるようにしたいと考えています。Rails では、AFAICT では、これはシングルトン オブジェクトを設定することによって行われます。

Time.zone = "America/Los_Angeles"

ベスト プラクティスに関する私の理解では、一般的に言えば、シングルトンは 1 回設定する必要があります。たとえば、アプリケーション構成で。

同様の質問への回答から、誰かが ApplicationController に設定することを提案しています

class ApplicationController < ActionController::Base
  before_filter :set_timezone
  def set_timezone
    # current_user.time_zone #=> 'London'
    Time.zone = current_user.time_zone if current_user && current_user.time_zone
  end
end

これは安全ですか?それとも、あるスレッドが別のスレッドに影響を与えるリスクがありますか? これのテストを実行してみますが、これまでで最も簡単なテスト シナリオではないので、誰かが既にこれを行っているかどうかを確認する必要があると考えました。

4

1 に答える 1

21

これが実装されているコードを見ると、現在のゾーンがスレッド ローカル変数に格納されていることがわかります。そのため、各スレッドは他のスレッドに干渉することなく Time.zone を設定できます。

于 2013-03-16T16:37:47.503 に答える