sql – 如何让Rails在数据库停机后自动重新建立数据库连接

前端之家收集整理的这篇文章主要介绍了sql – 如何让Rails在数据库停机后自动重新建立数据库连接前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
数据库停机后,Rails将首先抛出此错误

ActiveRecord::StatementInvalid: NativeException:
org.postgresql.util.PsqlException: Connection refused. Check that the
hostname and port are correct and that the postmaster is accepting
TCP/IP connections.

从那时起,每个数据库调用都具有以下错误,即使在数据库备份之后:

ActiveRecord::StatementInvalid: ActiveRecord::JDBCError: This
connection has been closed.

要使服务器再次运行,我必须重新启动rails服务器.这对我们来说不是理想的,因为我们的prod工程师希望对数据库进行维护,而不必备份依赖于数据库的所有服务.所以,我想知道 – 有没有办法自动获取Rails尝试重新建立数据库连接或推荐的方式来获得这种行为?

我试过的事情

我已经尝试在我的数据库选项中设置重新连接为true,因此,我可以杀死单个数据库连接,并且rails将重新建立连接.但是,数据库中断后不会.我发现从命令控制台我可以通过调用来恢复连接

ActiveRecord::Base::establish_connection

所以也许找到一个干净的地方为rails来调用上面的命令这将工作?有什么建议么?

解决方法

这是一个非常难看的解决方案,但我认为它应该有效.

>将重新连接设置为true,就像您以前一样.
>编辑文件activerecord-X.Y.Z / lib / active_record / connection_adapters / postgresql_adapter.rb并更改重新连接!方法

def reconnect!
  clear_cache!
  ActiveRecord::Base.establish_connection
end

需要更多的研究

检查它是否实际工作
>检查它是否不会同时呼叫建立连接多次(在这种情况下你需要一个锁)
>检查是否有更好的地方放置这个代码.Ruby允许您在运行时重新定义任何方法,但您需要加载符号.换句话说,您需要PostgresqlAdapter类才能存在.最接近加载该符号的是在初始化后的config / environment.rb中,但在堆栈中仍然没有足够的深度来加载该符号.

如果您在ActiveRecord代码之外找到已经加载了该符号的地方,并且可以编辑其方法,然后将以下代码放在其中:

class ActiveRecord::ConnectionAdapters::PostgresqlAdapter::StatementPool
  def reconnect!
    clear_cache!
    ActiveRecord::Base.establish_connection
  end
end

更重要的是,实际调用建立连接有点过分.可能会调用方法中的重要内容,以避免一些开销.

让我知道这是否有帮助,如果你取得了进展.

原文链接:https://www.f2er.com/mssql/81636.html

猜你在找的MsSQL相关文章