首页 > 解决方案 > 当客户端通过 Ruby Timeout::timeout 中断时对 ActiveRecord/PostgreSQL 事务的影响

问题描述

在我们开始之前,是的,我知道使用 Ruby 的 Timeout 是一个可怕的想法。但这更像是一个思想实验。

假设我有一些 Ruby 代码封装在一个Timeout::timeout块中,该块执行一大堆 SQL 事务(通过 ActiveRecord),来自SELECTs、UPDATEs 和INSERTs。鉴于 的性质Timeout,我们可以在准备或等待 SQL 事务完成的过程中中止。

理论上,如果对 DB 的请求在 Ruby 超时中断之前发送,事务将在 DB 上完成,但客户端将无法响应完成。当然,根据 Ruby 代码的上下文,如果需要后续事务以使我的模型被认为是完整和稳定的,以及由于代码未完全完成而导致的任何其他可能的副作用,数据最终可能是不完整的.

是否有任何其他可能的危险或副作用需要关注?交易是否有可能以其他方式挂起或失败?或者是否需要太多关于数据和应用程序的上下文级别的知识?

标签: ruby-on-railsrubypostgresqlactiverecordsqltransaction

解决方案


推荐阅读