jdo*_*dot 5 python django postgresql heroku celery
在Heroku和Postgres和RabbitMQ上使用Django 1.7和Celery。
我最近CONN_MAX_AGE在Django 中将设置设置为60,因此可以开始池化数据库连接。这一直很好,直到我发现一个问题,如果由于某种原因导致数据库连接被终止,Celery将继续使用错误的数据库连接,消耗任务,但立即在每个任务中引发以下错误:
OperationalError: SSL SYSCALL error: Bad file descriptor
Run Code Online (Sandbox Code Playgroud)
我想继续池化数据库连接,但是现在已经发生了几次,显然我不能允许Celery随机失败。仅当遇到此错误时,如何才能使Django(或Celery)强制建立新的数据库连接?
(或者,另一个想法我是为了迫使工人芹菜与运行修改settings.py,设置CONN_MAX_AGE=0只对芹菜......但感觉很像错误的方式来做到这一点。)
请注意,这个StackOverflow问题似乎可以在Rails上解决问题,但是我还没有找到与Django等效的问题: 在Heroku,Cedar和Unicorn上:正在获取ActiveRecord :: StatementInvalid:PGError:SSL SYSCALL错误:已检测到EOF
我遇到了同样的问题,并将其追溯到CONN_MAX_AGE和的组合CELERYD_MAX_TASKS_PER_CHILD。那时很明显,这一定与更换工作人员时 Celery 未正确关闭连接有关,从中我发现了此错误报告:https://github.com/celery/celery/issues/2453
升级到 Celery 3.1.18 似乎已经解决了我的问题。
| 归档时间: |
|
| 查看次数: |
1292 次 |
| 最近记录: |