我有一个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。
一个黑客且不推荐的方法是通过对类打补丁。你可以在一个初始化器中添加
class BigDecimal
def self.limit(val = 25)
25
end
end
问题是,你真的想把所有地方都限制在25吗?如果是,那么你可以把这个作为最后的手段来尝试,因为我不确定硬编码那个值的副作用(并且完全覆盖那个方法)。