我有一个Rails应用程序,我在控制器中的before操作中为每个请求设置时区,如下所示:
Time.zone="Central Time (US & Canada")
我可以用
打印时区puts Time.zone
这就是打印出来的东西。
(GMT-06:00) Central Time (US & Canada)
所有这一切都正常,直到我在我的模型中调用方法。当我这样做时,时区丢失了,我必须在我的模型中再次设置Time.zone
。
如果我在我的模型中调用下面的方法,则从我的控制器打印出UTC时间。
模型
def self.import_file(file)
puts Time.zone
# this prints out UTC time.
end
这是预期的行为,还是我错过了什么?
答案 0 :(得分:0)
Time.zone
被设置为线程变量。如果你在一个不同的线程(即后台工作者,进程,irb),Time.zone
将是你的应用程序的默认值(通常在config/application.rb
中设置)。
如果您不在不同的主题/流程中,请确保您不小心打电话给Time.zone = nil
。您还应该查看http://api.rubyonrails.org/classes/Time.html#method-c-use_zone处的Rails权威Time.use_zone
示例。