Rails ActiveRecord пессимистическая блокировка при чтении разных записей - PullRequest
0 голосов
/ 08 января 2019

Чтобы лучше понять пессимистическую блокировку, я попытался запустить этот код в своем приложении на Rails:

Thread.new do
  geoge_order.with_lock do
    puts "[geoge] transaction start"
    sleep(1)
    puts "[geoge] transaction end"
  end
end

Thread.new do
  amanda_order.with_lock do
    puts "[amanda] transaction start"
    puts "[amanda] transaction end"
  end
end

Я установил пессимистическую блокировку для разных записей заказов, поэтому ожидал, что каждый заказ будет читаемым одновременно. И я получил то, что ожидал от консоли Rails:

[geoge] transaction start
[amanda] transaction start
[amanda] transaction end
[geoge] transaction end

Однако при выполнении в тесте Rails блокировка чтения происходит так, как если бы блокировка была установлена ​​для той же записи:

[geoge] transaction start
[geoge] transaction end
[amanda] transaction start
[amanda] transaction end

Почему результат на консоли рельсов отличается от результата теста рельсов?

  • среда разработки: Ruby 2.6.0, Ruby on Rails 5.2.2, MySql 14.14, тест: Rspec, MiniTest
...