我在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测试用例时,我得到了两次相同的连接。
你知道为什么吗?这是一些小型测试配置吗?
2条答案
按热度按时间06odsfpq1#
我认为引入这种行为的this is the PR
此更改使用语句缓存将线程锁定为使用单个连接ID,而不是每个线程都无法看到彼此。这段代码只在fixture的设置和拆卸中运行,所以它不会影响真实的的生产数据库。
qpgpyjmq2#
在多个线程中只允许一个ActiveRecord连接。
检查:
active_record_intialize unless ActiveRecord::Base.connected?
...其中active_record_initialize是一个调用ActiveRecord::Base.establish_connection的方法。
它并不完美,但它似乎更可靠的线程很多。