ActiveRecord ConnectionPool - 异常处理?

时间:2013-05-24 03:34:06

标签: ruby-on-rails ruby activerecord

我正在使用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

1 个答案:

答案 0 :(得分:2)

应该没问题,从source code使用ensure块,最后释放连接。

def with_connection
  ...
ensure
  release_connection(connection_id) if fresh_connection
end