在Heroku上挂载Celery时出现“[Errno 111] 连接被拒绝”错误
我在尝试用Celery为我的Django项目写一个后台异步处理程序。
我使用Rabbitmq作为任务队列,同时在Heroku上使用Cloudamqp。
问题是:整个项目在我自己的电脑上(使用本地测试)运行得很好,但在生产服务器上却不行。
我收到的错误信息是:[Errno 111] Connection refused
然后我做了一些研究,可能我理解错了,但似乎问题在于我已经达到了可以使用的工作进程数量的限制,因为我现在在使用Heroku的免费账户。
我看到有人提到:“但记得如果你使用的是免费计划,要调整BROKER_POOL_LIMIT。把它设置为1就可以了。如果你遇到连接问题,可以尝试减少你的网页工作进程和Celery工作进程的并发数。”不过我不太确定该怎么做。
这是我的setting.py:
BROKER_URL="amqp://paswzaog:0TwC3i7cBdTAKA9JE57EMm1xUzovFbry@turtle.rmq.cloudamqp.com/paswzaog"
BROKER_POOL_LIMIT = 1
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend'
CELERY_BEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
CELERY_RESULT_BACKEND = 'amqp'
CELERY_TASK_RESULT_EXPIRES = 18000 # 5 hours.`
这是错误信息:
'[Errno 111] Connection refused
'/app/.heroku/python/bin',
'/app/.heroku/python/lib/python2.7/site-packages/setuptools-3.6-py2.7.egg',
'/app/.heroku/python/lib/python2.7/site-packages/pip-1.5.6-py2.7.egg',
'/app',
'/app/.heroku/python/lib/python27.zip',
'/app/.heroku/python/lib/python2.7',
'/app/.heroku/python/lib/python2.7/plat-linux2',
'/app/.heroku/python/lib/python2.7/lib-tk',
'/app/.heroku/python/lib/python2.7/lib-old',
'/app/.heroku/python/lib/python2.7/lib-dynload',
'/app/.heroku/python/lib/python2.7/site-packages',
'/app','
有没有人遇到过类似的问题?或者有人能推荐一个关于如何在Heroku上设置Celery的详细教程吗?提前谢谢!
1 个回答
0
看起来你的登录信息可能不太对。要么就是你同时连接的数量超过了一个。
测试这个问题的一个好方法是把你的网页服务器的数量调到0(也就是用命令heroku scale web=0),然后再创建一个工作进程(用命令heroku scale worker=1)——接着查看你的Heroku日志(用命令heroku logs --tail),看看这个单独的工作进程能否连接上。