3

ConnectionPool を使用して、データベース接続をチェックアウト/インしています。

したがって、例外がなければ、すべてが期待どおりに機能します。接続は最後にチェックインされます。

しかし、with_connection でラップされたコード ブロックに例外がある場合はどうなるでしょうか。

AR 接続は引き続きプールに自動的にチェックインされますか?

ActiveRecord::Base.connection_pool.with_connection do
   m = SomeModel.find(something)
   m.foo = "bar"
   m.save!
   etc

   #EXCEPTION RAISED HERE
   # WHAT HAPPENS?

end
4

1 に答える 1

2

ソースコードからensure、最後に接続を解放するブロックが使用されます。

def with_connection
  ...
ensure
  release_connection(connection_id) if fresh_connection
end
于 2013-05-24T04:41:38.267 に答える