【问题标题】:Managine ActiveRecord connection pools管理 ActiveRecord 连接池
【发布时间】:2014-05-19 22:44:48
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby activerecord


    【解决方案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 }
    

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      相关资源
      最近更新 更多