9

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

Time.zone = "America/Los_Angeles" 

ベストプラクティスの私の理解では、一般的に言えば、シングルトンは、一度設定しなければならない、ということです。たとえば、アプリケーションの構成です。同様の質問への答えから

、誰かが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 

でそれを設定することを示唆しているが、この安全ですか?あるいは、あるスレッドが別のスレッドに影響を及ぼす危険性がありますか?私はこれを試してみるつもりですが、これは最も簡単なテストシナリオではありませんので、誰かがすでにこれを行っているかどうかを確認する必要があります。

答えて

16

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

関連する問題