2017-05-13 29 views
0

Rubyコードのロールバックをトランザクションとしてテストしているコードが1つあります。2番目のデータベース(postgres)がトランザクションでロールバックされない

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 

そこでここでは、タイムアウトを作っているし、すべてのプロセスは、第二のデータベースに起こったプロセスなしにロールバックされますので、どのように我々はあまりにも二DBからのプロセスをロールバックすることができますか?

答えて

0

あなたが2つのデータベースで作業している場合は、ソリューションは、ロールバック

あなたがデータベース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 

ソース:私は考えて nested-transctions

+0

この状況では、私はそれを上げるための条件を作ることはできません。なぜなら、私はタイムアウトのためにこのロールバックを行っているからです。 – django

+0

条件がオプションの場合は、レスキューなどを使用できます。コアのアイデアは、ネストされたトランザクションを持っていることです – rohan

+0

実際に私は問題を抱えています、問題はフォロワーDB – django

関連する問題