9

mi piacerebbe per consentire agli utenti di mia app specificare un fuso orario, e quindi impostare il fuso orario, all'inizio di ogni richiesta. In Rails, AFAICT, questo è fatto impostando l'oggetto Singleton:Impostazione Time.zone durante una richiesta: thread-safe?

Time.zone = "America/Los_Angeles" 

mia comprensione delle migliori pratiche è che, in generale, un Singleton deve essere impostato UNA VOLTA. Ad esempio nella configurazione dell'applicazione.

Da una risposta ad una domanda simile, qualcuno suggerisce l'impostazione nel 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 

Questa funzione è sicura? Oppure corro il rischio di avere un thread che ne influenza un altro? Cercherò in esecuzione di un test di questo, ma non è lo scenario di prova più semplice mai così ho pensato di vedere se qualcuno ha già fatto.

risposta

16

Se si guarda la code dove questo viene implementato si può vedere che la zona corrente viene memorizzato in una variabile locale filo, per cui ogni filo di impostare Time.zone senza interferire con gli altri fili.