【发布时间】:2023-03-27 10:29:01
【问题描述】:
这里有点开放式问题,所以我先概述一下这个问题。我们有一个Resque 工作人员,他应该将数据同步作业从队列中弹出,原因有两个,使用 Cron(并一遍又一遍地支付 Rails 环境启动时间)很糟糕,而替代队列,嗯当他们announced Resque 时,Github 对他们提出了很好的指控。此外,Redis 时间序列功能已经在我们的基础架构中发挥了重要作用,我们还将 TS 数据混洗到 RRDTool 等...
问题来了,作业之间通常间隔三个小时(但工作人员可以随时安排作业……因此需要排队),PostgreSQL 服务器消失了。很容易治愈,我希望在相应的环境下设置reconnect: true 将确保它按预期工作。我在few places 中读到reconnect: true 不适用于使用fork() 的应用程序.哪个,Resque 自然会开始它的工作人员......我不明白的部分是为什么 ActiveRecord 的重新连接在这种情况下无法工作?
我注意到 ActiveRecord 中 reconnect!、MySQL Adapter 和 PostgreSQL Adapter 的实现是不同的……但无论哪种方式,我都希望 ActiveRecord reconnect: true 配置能够工作。
问题似乎很清楚,当子进程存在时,它会关闭父进程创建的文件句柄(从而挂断与数据库的连接)-是否可以以 ActiveRecord 的方式关闭文件句柄无法识别连接已终止?
还有一个 ActiveRecord aware fork(),我可以在 Github 上找到它,作为一个馅饼 - 它未经测试,但我认为它可以工作(没有在当前的 Rails 上尝试过......)
p>我的问题更多,如果你 fork(),为什么 AR 中的自动重新连接不能工作?(而且,最近 - 我不能是唯一遇到这个问题的人;我将其归结为将 PGSQL 与 Resque 一起使用!)
【问题讨论】:
标签: mysql ruby postgresql activerecord resque