Ruby on rails 超时后断开ruby中的mysql连接
我的网络防火墙会在几分钟后杀死所有空闲连接。这导致我们的rails应用程序不断重新连接,最终数据库开始拒绝连接,因为达到了最大连接限制。不幸的是,我没有能力改变网络或数据库 我正在寻找一种方法,在每个连接上空闲1分钟后抢先断开连接。我想在池中的每个连接上记录一个时间戳,方法是在: ActiveRecord::ConnectionAdapters::MysqlAdapter#执行 基本上Ruby on rails 超时后断开ruby中的mysql连接,ruby-on-rails,ruby-on-rails-4,activerecord,puma,Ruby On Rails,Ruby On Rails 4,Activerecord,Puma,我的网络防火墙会在几分钟后杀死所有空闲连接。这导致我们的rails应用程序不断重新连接,最终数据库开始拒绝连接,因为达到了最大连接限制。不幸的是,我没有能力改变网络或数据库 我正在寻找一种方法,在每个连接上空闲1分钟后抢先断开连接。我想在池中的每个连接上记录一个时间戳,方法是在: ActiveRecord::ConnectionAdapters::MysqlAdapter#执行 基本上 attr_reader :last_used_at def execute @last_used_at
attr_reader :last_used_at
def execute
@last_used_at = Time.now
super
end
然后,让一个连接隔离开关螺纹在轨道上运行,启动时通过每个连接并断开(#断开!)空闲超过一分钟的任何连接
这在webrick中运行良好,但在puma中,由于某种原因,连接隔离开关无法读取在MysqlAdapater on execute中设置的@last_used_at实例变量。我可以看到连接池中的所有连接,但是当我检查它们的时间戳时,它们都是空的
我想这与puma和mysql一起工作以保持每个线程状态分离的方式有关?我在这里不知所措。任何指针都会非常有用