ruby-on-rails 新线程在测试中使用与主线程相同的连接

zdwk9cvp  于 2023-06-25  发布在  Ruby
关注(0)|答案(2)|浏览(107)

我在Rails控制台中运行以下代码:

User.count
Thread.new { User.count; puts ActiveRecord::Base.connection_pool.connection.object_id }.join
puts ActiveRecord::Base.connection.object_id

正如我所料,我得到了两个不同的连接对象:

46981836802520
46981834013480

当我将相同的代码放入minitest测试用例时,我得到了两次相同的连接。
你知道为什么吗?这是一些小型测试配置吗?

06odsfpq

06odsfpq1#

我认为引入这种行为的this is the PR
此更改使用语句缓存将线程锁定为使用单个连接ID,而不是每个线程都无法看到彼此。这段代码只在fixture的设置和拆卸中运行,所以它不会影响真实的的生产数据库。

qpgpyjmq

qpgpyjmq2#

在多个线程中只允许一个ActiveRecord连接。
检查:
active_record_intialize unless ActiveRecord::Base.connected?
...其中active_record_initialize是一个调用ActiveRecord::Base.establish_connection的方法。
它并不完美,但它似乎更可靠的线程很多。

相关问题