加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – rspec中的多线程ActiveRecord请求

发布时间:2020-12-16 21:50:53 所属栏目:百科 来源:网络整理
导读:我试图在测试中重新创建一个竞争条件,所以我可以尝试一些解决方案.我发现在我在测试中创建的线程中,ActiveRecord总是返回0表示计数,nil表示查找.例如,表“foos”中有3行: it "whatever" do puts Foo.count 5.times do Thread.new do puts Foo.count end end
我试图在测试中重新创建一个竞争条件,所以我可以尝试一些解决方案.我发现在我在测试中创建的线程中,ActiveRecord总是返回0表示计数,nil表示查找.例如,表“foos”中有3行:
it "whatever" do
    puts Foo.count
    5.times do
      Thread.new do
        puts Foo.count
      end
    end
  end

将打印

3
0
0
0
0
0

test.log显示预期的查询,预期6次:

SELECT count(*) AS count_all FROM `active_agents`

知道这里发生了什么吗?

解决方法

我假设ActiveRecord为每个线程打开一个专用的数据库连接.由于每个RSpec示例都包含在事务中,因此其他线程可能看不到更改.

尝试禁用该规范的事务夹具.

describe "thread test" do
  self.use_transactional_fixtures = false

  it "whatever" do
    puts Foo.count
    5.times do
      Thread.new do
        puts Foo.count
      end
    end
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读