Rails 关于 Rails 的多数据库事务

brookepowell · September 03, 2021 · Last by ywjno replied at September 05, 2021 · 554 hits

rails6 支持多数据库以来,发现使用ActiveRecord::Base.transaction来处理跨数据库的事务时,不起作用。

出现异常后也不会全部 rollback。

请问在这种情况下有没有什么别的方法解决这个问题?

主动 raise 一下 Rollback 试试?

ActiveRecord::Base.transaction do   
   begin
       tableA.create(:dataA => dataA)
       tableB.create(:dataB => dataB) # 让这条触发error
   rescue
       raise ActiveRecord::Rollback
   end
end
Reply to Catherine

试过,只 rollback 了触发错误的那个数据库连接的数据,没有 rollback 另一个数据库的数据

3 Floor has deleted

跨数据库只能是分布式事务

跨数据库的只能用分布式事务机制,并且没有完美的方案,只能尽量减少出错,如果设计金钱的,对账系统必不可少。

自己写一个 TCC(try confirm cancel) 的功能也挺好写的不太麻烦

You need to Sign in before reply, if you don't have an account, please Sign up first.