Ruby on rails Rails:线程访问器在开发过程中随机变为“nil”

Ruby on rails Rails:线程访问器在开发过程中随机变为“nil”,ruby-on-rails,ruby,Ruby On Rails,Ruby,在Rails5.2.2.4中,我遇到了一个令人费解的行为,线程访问器随机变成nil 鉴于本模块: module Test thread_mattr_accessor :max_installments self.max_installments = 12 end 在6次寻呼机刷新中(在开发中使用Puma),当将整数与该变量进行比较时,将整数与nil进行比较失败 在Rails红色异常页面上,我可以使用底部控制器确认它实际上为零 但是,只要在某些时候刷新页面,我最终会在设置该变量的情

在Rails
5.2.2.4
中,我遇到了一个令人费解的行为,线程访问器随机变成
nil

鉴于本模块:

module Test

  thread_mattr_accessor :max_installments

  self.max_installments = 12

end
在6次寻呼机刷新中(在开发中使用Puma),当将整数与该变量进行比较时,
将整数与nil进行比较失败

在Rails红色异常页面上,我可以使用底部控制器确认它实际上为零

但是,只要在某些时候刷新页面,我最终会在设置该变量的情况下获得正常的页面加载

什么可能会将其设置为零?除了上面的类定义中的
self.max\u installants=
之外,没有任何代码在任何其他地方设置该变量。

模块测试

模块测试
线程存取器:最多分期付款
self.max_分期付款=12
结束
正常使用

put“max_installants is:#{Test.max_installants.inspect}”
#最多分期付款额为:12
螺纹使用中

Thread.new{puts“线程中的max_分期付款是{Test.max_分期付款.inspect}”
#线程中的最大分期付款数为零
在线程内设置值

Thread.new do
Test.max_分期付款=99
将“现在线程中的max#u installants为{Test.max_installants.inspect}”
结束
#现在线程中的最大分期付款数是99
Thread.new{put“另一个线程中的max_installants是{Test.max_installants.inspect}”
#另一个线程中的最大分期付款数为零
放置“最大分期付款为:{Test.max\u分期付款}”
#最多分期付款额为:12
必须尽快发布,我们可以设置一个默认值,以便在这样的线程中使用

模块测试
线程访问器:最多分期,默认值:12
self.max_分期付款=12
结束

现在,如果您使用内部线程,则需要在之前设置值以避免得到nil。

我将检查
线程访问器的实现。可能是Rails中的一个bug。感谢您指出可以设置默认值的提交。虽然这还没有实现,但如何处理有时需要以线程安全的方式更改(例如,在并行测试期间)的类级别设置?使用简单的类变量或类实例变量不是线程安全的,使用thread_mattr_访问器也不实用,因为我不能在类本身或初始值设定项中设置它的值,因为新旋转的线程看不到它的值。我也在寻找一个轻巧的替代方法@sandre89