这里是一个开放式问题的位,所以我会先概述问题。我们有一个Resque工人谁应该弹出的数据同步作业关闭队列,原因有两方面,使用cron(和支付Rails环境开机时间超过岁及以上)很烂,和备选队列,以及Github上发一个相当不错的案件,当他们announced Resque。此外,Redis的时间序列的功能已经发挥我们的基础设施,在这里我们也洗牌TS数据到的RRDTool &等的重要组成部分......ActiveRecord在分叉/线程应用程序中运行时无法重新连接?
这里的问题,与工作之间典型的三小时(但工作人员可以随时安排工作......因此排队),PostgreSQL服务器就会消失。足够容易治愈,我预计,相应的环境下设置reconnect: true
将确保这一预期一样。我在fewplaces读取reconnect: true
不会为使用fork()
应用程序。其中,自然Resque确实,启动它的工作人员......我不明白的部分是为什么ActiveRecord的重新连接无法在这些情况下工作?
我注意到的reconnect!
的MySQL Adapter和ActiveRecord的的PostgreSQL Adapter不同的实现......但无论哪种方式我期望的ActiveRecord reconnect: true
配置工作。
的问题似乎是不够的,当孩子过程中存在,它会关闭处理由父创建的文件明确(因此挂到数据库的连接) - 这可能在这样一个关闭一个文件句柄ActiveRecord无法识别连接已终止的方式?
还有,对于它的价值,一个ActiveRecord aware fork()这是我能找到在Github上,作为pastie - 这是未经测试,但我认为它的工作原理(未与当前的Rails试过..)
我的问题比较多,为什么不能在AR工作的自动重新连接,如果你fork()
?(后来,我不能成为唯一一个遇到这个问题的人;我正在使用Resql来使用PGSQL!)
罗马,肯定 - 我有解决办法,但我专门找了,为什么重新连接的原因:真不工作。我想知道是否它是关于并发性(activerecord的'allowconcurrency'标志) - 并认识到第一个连接仍然连接...但我真的很茫然。 – 2011-04-18 06:56:54
好吧,通过查看activerecord代码,我可以告诉的是,'reconnect'选项不支持PostgreSQL适配器。 – Roman 2011-04-18 07:02:27
罗马人,你可以更具体,也许是一个链接 - 有一个实现的地方,我发现...(我敢肯定) – 2011-04-18 19:02:33