ruby on rails - plantillas - ¿Cómo establecer el nivel de aislamiento de la transacción utilizando la conexión ActiveRecord?
las mejores gemas de ruby (3)
Necesito administrar el nivel de aislamiento de transacciones por transacción de manera portátil en todas las bases de datos (SQLite, PostgreSQL, MySQL al menos).
¿Podría por favor recomendar una gema que mejore los adaptadores de conexión de base de datos ActiveRecord para permitir eso?
Sé que puedo hacerlo manualmente, así:
User.connection.execute(''SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE'')
... pero esperaría algo como:
User.isolation_level( :serializable ) do
# ...
end
Esta funcionalidad es compatible con ActiveRecord en sí:
MyRecord.transaction(isolation: :read_committed) do
# do your transaction work
end
Es compatible con los niveles de aislamiento ANSI SQL:
-
:read_uncommitted
-
:read_committed
-
:repeatable_read
-
:serializable
Este método está disponible desde Rails 4 , no estaba disponible cuando el OP hizo la pregunta. Pero para cualquier aplicación de Rails decentemente moderna, este debería ser el camino a seguir.
Looks Rails4 tendría la característica fuera de la caja:
https://github.com/rails/rails/commit/392eeecc11a291e406db927a18b75f41b2658253
No había ninguna gema disponible, así que desarrollé una (MIT): https://github.com/qertoip/transaction_isolation