管理ActiveRecord连接池

时间:2014-05-19 22:44:48

标签: ruby-on-rails ruby activerecord

我有一个非常不寻常的情况,我需要使用匿名类连接到sqlite数据库。在每个请求中创建此类,然后使用ActiveRecord的establish_connection连接到数据库。我的问题是,每次调用establish_connection时,ActiveRecord都会创建一个新的连接池来跟踪通过该类建立的连接。由于这些是一次性使用类,因此实际上是内存泄漏,并且ActiveRecord跟踪的连接池数随每个请求而增长。解决此问题的一种方法是致电

model_copy = Class.new Model { ... }
model_copy.establish_connection ...
# Do work
model_copy.connection.disconnect!
model_copy.connection_handler.remove_connection model_copy

我想在没有明确断开的情况下这样做!和remove_connection调用,因为它很烦人,很容易出错和内存泄漏。有没有人在这里有任何指导?

谢谢!

1 个答案:

答案 0 :(得分:1)

假设# Do work部分是唯一发生变化的部分,这看起来像一个采用块的方法的经典用例:

def hit_the_db
  model_copy = Class.new Model { ... }
  model_copy.establish_connection ...
  yield
  model_copy.connection.disconnect!
  model_copy.connection_handler.remove_connection model_copy
end

...

hit_the_db { block of code that does work }