gpt4 book ai didi

ruby - 在 Padrino 中设置时区

转载 作者:太空宇宙 更新时间:2023-11-03 16:50:08 25 4
gpt4 key购买 nike

我在设置我的 padrino 项目中的默认 ActiveSupport::TimeZone 时遇到问题。

在我的 boot.rb 中有

Padrino.after_load do
Time.zone = 'UTC'
ActiveRecord::Base.default_timezone = :utc
end

我的 Controller 文件有:

MyApp::App.controllers :post do
get :index do
puts Time.zone # this returns nil
render 'index'
end
end

当我点击索引操作时,Time.zone 为零。似乎有些东西可能正在覆盖 Time.zone 或者它没有正确加载。

  • 在 boot.rb 中设置后,我能够打印出时区。所以我知道它已经设置好了。

最佳答案

你可以这样设置:

Time.zone_default = Time.find_zone!("UTC")

这就是您所需要的,但请参阅下面的详细信息。

以上对我使用 activesupport 5.0.2 有效。我查看了 Time.zone 是如何实现的:

class Time
include DateAndTime::Zones
class << self
attr_accessor :zone_default

# Returns the TimeZone for the current request, if this has been set (via Time.zone=).
# If <tt>Time.zone</tt> has not been set for the current request, returns the TimeZone specified in <tt>config.time_zone</tt>.
def zone
Thread.current[:time_zone] || zone_default
end

然后我猜测它可能在当前线程中与 Padrino 一起丢失。

据推测,Time.zone 需要为每个线程设置一次。无论出于何种原因,在 Padrino.before_load 中分配区域时并非总是如此。我没有深入研究这个问题,但我确信可以找到一个更好的解决方案来在每个线程中分配它。

如果您想要每个用户的时区,而不仅仅是整个应用的全局时区,您将需要进一步挖掘。

关于ruby - 在 Padrino 中设置时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24356385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com