在Heroku上挂载Celery时出现“[Errno 111] 连接被拒绝”错误

2 投票
1 回答
1482 浏览
提问于 2025-04-18 13:22

我在尝试用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),看看这个单独的工作进程能否连接上。

撰写回答