【问题标题】:Sinatra Safely Set Timezone per RequestSinatra 根据请求安全地设置时区
【发布时间】:2020-10-09 20:22:50
【问题描述】:

我正在尝试弄清楚如何在 Sinatra 中为多线程应用程序根据每个请求设置时区。

Rails 提供 :around_action 过滤器来处理此问题,其中请求在 Time.use_zone 块内处理。

around_action :set_time_zone, if: :current_user

def set_time_zone(&block)
  Time.use_zone(current_user.time_zone, &block) 
end

然而,Sinatra 只提供前后过滤器:

before do
  Time.zone = current_user.time_zone
end

after do
  Time.zone = default_time_zone
end

然而,这种方法似乎不是线程安全的。在 Sinatra 中实现此目的的正确方法是什么?

【问题讨论】:

标签: ruby sinatra activesupport


【解决方案1】:

我记得有一个提供around 挂钩的 Sinatra 扩展,但找不到。否则,您必须将代码放入每个操作中:

def my_endpoint
  with_around_hooks do
    render text: "hello world"
  end
end

private

def with_around_hooks(&blk)
  # you could hypothetically put more stuff here
  Time.use_zone(current_user.time_zone, &blk) 
end

希望其他人知道一种将代码包装在每个请求周围的方法

【讨论】:

    猜你喜欢
    • 2022-11-16
    • 1970-01-01
    • 2015-12-04
    • 2014-08-04
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多