我有一个非常不寻常的情况,我需要使用匿名类连接到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调用,因为它很烦人,很容易出错和内存泄漏。有没有人在这里有任何指导?
谢谢!
答案 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 }