我们有一个Rails 4应用程序,该应用程序使用的数据库有时会通过启动新的数据库实例来进行更新,然后通过ops更新DNS记录以指向新实例(这并不理想,但我无法更改那)。问题在于,Rails连接池仍保持其与 old 数据库的连接打开,并且除非我们重新启动Rails,否则不会与 new 数据库进行通信。我们可以做到,但这很痛苦。
我们希望有一个管理端点,可以使该端点告诉应用程序正常关闭数据库连接并重新启动。 ActiveRecord::Base.connection_pool.disconnect!
当然会关闭旧的数据库连接,当请求新的数据库连接时,它们会与新实例通信,但是它还会对所有正在运行的查询使用shot弹枪,并终止它们而不是让它们结束。
是否有一种方法可以让Rails在运行时刷新其所有数据库连接,从而允许当前正在运行的查询在关闭前完成?