Ruby on rails 第二个数据库(postgres)未在事务中回滚
我有一个代码,我正在用ruby代码作为事务测试回滚,如果它在该块中失败了,下面是我的代码Ruby on rails 第二个数据库(postgres)未在事务中回滚,ruby-on-rails,ruby,heroku,transactions,Ruby On Rails,Ruby,Heroku,Transactions,我有一个代码,我正在用ruby代码作为事务测试回滚,如果它在该块中失败了,下面是我的代码 def create_log begin ActiveRecord::Base.transaction do log = Log.new(params[:log]) if log.save # line of code # line of code #Only this below function happening through **
def create_log
begin
ActiveRecord::Base.transaction do
log = Log.new(params[:log])
if log.save
# line of code
# line of code
#Only this below function happening through **SECOND database postgres(under heroku)**
log.add_logs_in_review(status)
end
end
rescue Timeout::Error => e
puts "#{e}"
end
end
因此,我们在这里设置超时,并且所有进程都将回滚,而没有发生在第二个数据库上的进程,那么我们如何也从第二个数据库回滚进程呢?如果您使用的是两个数据库,解决方案是使用嵌套事务并处理回滚 如果您有数据库A和B
A.transaction do
B.transaction do
raise ActiveRecord::Rollback if (some condition)#this will rollback both A and B
end
raise ActiveRecord::Rollback if (some condition)#this will rollback only A as B has already ended
end
资料来源:
我认为在这种情况下,我们不能设置任何条件来提高超时,因为我在这里执行超时回滚,在这种情况下?如果条件是可选的,您可以使用rescue或其他任何方法。核心思想是嵌套事务实际上我遇到了问题,问题是followerdb