gpt4 book ai didi

activerecord - 是什么导致 ActiveRecord 在 fork 后中断 Postgres 连接?

转载 作者:行者123 更新时间:2023-12-04 15:57:12 63 4
gpt4 key购买 nike

我在使用 fork 的 Rails 4.2 项目中有一个 Rake 任务。 .我的问题是,在 fork 进程完成后(即在 Process.wait 之后),当我再次尝试访问数据库时,出现以下 Postgres 错误:

PG::ConnectionBad: PQconsumeInput() server closed the connection unexpectedly

起初我怀疑 ActiveRecord 会在 fork 进程完成后自动关闭连接。但是看了AR的代码 connection_pool.rb 似乎 fork 进程应该使用自己的连接:

A connection was established in an ancestor process that must have subsequently forked. We can't reuse the connection, but we can copy the specification and establish a new connection with it.



(来自 ActiveRecord::ConnectionAdapters::ConnectionHandler#pool_for_owner )

然而, fork 使连接变得无用。

我试图完全阻止 fork 进程访问数据库,并在 fork 后使用以下代码验证旧连接不能重用:
ActiveRecord::Base.default_connection_handler = nil
ActiveRecord::Base.connection_handler = nil

有关如何解决此问题的任何建议?

最佳答案

子进程完成工作后,您可以使用 ActiveRecord::Base.establish_connection 重新建立与数据库的连接。 .之后,您的 Rake 进程应该能够像往常一样访问数据库。

关于activerecord - 是什么导致 ActiveRecord 在 fork 后中断 Postgres 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27892975/

63 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com