Rails 关于 Rails 的多数据库事务

brookepowell · 2021年09月03日 · 最后由 ywjno 回复于 2021年09月05日 · 573 次阅读

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
Catherine 回复

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

3 楼 已删除

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

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

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

需要 登录 后方可回复, 如果你还没有账号请 注册新账号