使用Puma时,BigDecimal limit的正确初始化位置在哪里?

问题描述 投票:1回答:1

我有一个rails初始化器,可以设置大十进制的限制。

BigDecimal.limit(20)

这被执行了,似乎正确地设置了限制。

但是当一个网络请求进来时(我使用Puma),在处理请求的线程上似乎没有设置限制。 该限制被设置为0,这是默认值。

我是否应该在其他地方设置限制?

如果你想重现。

创建一个全新的rails应用,并添加一个初始化器来设置limit。

BigDecimal.limit(20)
puts "*** Set #{BigDecimal.limit}"

在您的应用程序控制器中添加

before_action :check_big_decimal

def check_big_decimal
  puts "***request #{BigDecimal.limit}"
end

启动你的服务器,刷新页面,并提出请求。

你应该看到它被设置为20,但是当请求进来的时候,它又回到了0。

ruby-on-rails puma
1个回答
4
投票

我从Rails上得到了一个答案 社区

基本的要点是。

当Puma启动一个新的线程来处理一个请求时,新线程不能访问初始线程中设置的BigDecimal限制。


0
投票

一个黑客且不推荐的方法是通过对类打补丁。你可以在一个初始化器中添加

class BigDecimal
  def self.limit(val = 25)
    25
  end
end

问题是,你真的想把所有地方都限制在25吗?如果是,那么你可以把这个作为最后的手段来尝试,因为我不确定硬编码那个值的副作用(并且完全覆盖那个方法)。

© www.soinside.com 2019 - 2024. All rights reserved.