2013-03-16 68 views
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而不會干擾其他線程。

相關問題