Ответ 1
Не было никакого драгоценного камня, поэтому я разработал один (MIT): https://github.com/qertoip/transaction_isolation
Мне нужно управлять уровнем изоляции транзакций на основе транзакций способом переносимым для баз данных (по крайней мере, SQLite, PostgreSQL, MySQL).
Не могли бы вы порекомендовать gem, который расширяет адаптеры подключения к базам данных ActiveRecord, чтобы это разрешить?
Я знаю, что могу сделать это вручную, например:
User.connection.execute('SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE')
... но я бы ожидал чего-то вроде:
User.isolation_level( :serializable ) do
# ...
end
Не было никакого драгоценного камня, поэтому я разработал один (MIT): https://github.com/qertoip/transaction_isolation
Эта функция поддерживается самим ActiveRecord:
MyRecord.transaction(isolation: :read_committed) do
# do your transaction work
end
Он поддерживает уровни изоляции ANSI SQL:
:read_uncommitted
:read_committed
:repeatable_read
:serializable
Этот метод доступен с Rails 4, он был недоступен, когда ОП задал вопрос. Но для любого прилично современного Rails-приложения это должен быть путь.
Looks Rails4 будет иметь эту функцию вне поля:
https://github.com/rails/rails/commit/392eeecc11a291e406db927a18b75f41b2658253