Многопоточный ActiveRecord запрашивает в rspec

Я пытаюсь воссоздать состояние состязания в тесте, таким образом, я могу испытать некоторые решения. Я нахожу, что в потоках создаю в своем тесте, ActiveRecord всегда возвращается 0 для количеств и ноля для находок. Например, с 3 строками в таблице "foos":

  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`

Какая-либо идея, что продолжается здесь?

8
задан jeem 15 May 2010 в 18:57
поделиться

1 ответ

Я предполагаю, что 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
16
ответ дан 5 December 2019 в 10:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: