使用Postgres和RabbitMQ在Heroku上使用Django 1.7和Celery。
我最近将Django中的CONN_MAX_AGE
设置设置为60
左右,因此我可以开始汇集数据库连接。这工作正常,直到我发现一个问题,如果由于任何原因数据库连接被杀死,Celery将继续使用错误的数据库连接,消耗任务但立即在每个任务中抛出以下错误:
OperationalError: SSL SYSCALL error: Bad file descriptor
我想继续汇集数据库连接,但现在已经发生了几次,我显然不能让Celery随机失败。 当出现此错误时,如何让Django(或Celery)强制新的数据库连接 ?
(或者,我的另一个想法是强迫Celery工作人员使用仅为Celery设置settings.py
的修改后的CONN_MAX_AGE=0
来运行...但这感觉非常像错误的做法它)。
请注意,这个StackOverflow问题似乎解决了Rails上的问题,但我还没有找到Django的等价物: On Heroku, Cedar, with Unicorn: Getting ActiveRecord::StatementInvalid: PGError: SSL SYSCALL error: EOF detected
答案 0 :(得分:1)
我遇到了同样的问题,并将其追溯到First of all, if you're using devise for authentication,email field is provided by default. The source for the error is: "The email field is also present in users table. That's why whenever you're run db:migrate it shows duplicate column error.
So drop the users table by giving command ActiveRecord::Migration.drop_table(:users)" in rails console.
Then, give rails g model user user_name:string mobile_number:integer
Hope it will helps.
和CONN_MAX_AGE
的组合。在那一点上,显而易见的是,当一个工人被替换时,它必须与Celery没有正确关闭连接,并且我发现了这个错误报告:https://github.com/celery/celery/issues/2453
升级到Celery 3.1.18似乎已经为我解决了这个问题。