具有事务块轨的TimeOut

dja*_*ngo 9 ruby transactions ruby-on-rails heroku

据我所知,如果我们在这个事务中有任何代码,并且当它发生任何错误(保存!,...)时,整个代码将恢复,这里的问题是如果发生任何超时(机架超时= 12)在这个街区.

def create
  ActiveRecord::Base.transaction do
   // timeout happens
  end
end
Run Code Online (Sandbox Code Playgroud)

发生时如何用事务回滚代码Rack::Timeout

Old*_*Pro 3

当机架超时发生时,任何正在进行的事务都将被回滚,但已经提交的事务当然将保持提交状态。您不必担心它。

一旦启动数据库事务,它最终将被提交回滚。这是结束交易的唯一两种可能性。当您提交事务时,您是在说您希望保存这些更改,无论接下来发生什么。如果不提交事务,一旦事务进入事务无法继续的任何状态(例如网络连接中断),数据库将自动回滚事务。

ActiveRecord当区块正常退出时自动提交事务ActiveRecord::Base.transaction do。异常退出可能会导致向数据库ActiveRecord发出ROLLBACK命令,这是高效且良好的实践,并将连接返回到就绪状态,但这并不是绝对必要的,因为除非显式提交事务,否则数据库最终会自动回滚它。