引发 ConnectionError(self._error_message(e)) kombu.exceptions.OperationalError:连接到 localhost:6379 的错误

Posted

技术标签:

【中文标题】引发 ConnectionError(self._error_message(e)) kombu.exceptions.OperationalError:连接到 localhost:6379 的错误 111。拒绝连接【英文标题】:raise ConnectionError(self._error_message(e)) kombu.exceptions.OperationalError: Error 111 connecting to localhost:6379. Connection refused 【发布时间】:2020-03-13 01:50:25 【问题描述】:

minimal django/celery/redis 在本地运行,但是当我在 python 上运行时,部署到 heroku 时出现以下错误:

 raise ConnectionError(self._error_message(e))
 kombu.exceptions.OperationalError: Error 111 connecting to localhost:6379. Connection     
 refused.

这是我的应用程序目录中的 tasks.py 文件:

   from celery import Celery
   import os

   app = Celery('tasks', broker='redis://localhost:6379/0')

   app.conf.update(BROKER_URL=os.environ['REDIS_URL'],
            CELERY_RESULT_BACKEND=os.environ['REDIS_URL'])

   @app.task
   def add(x, y):
      return x + y

Requirements.txt:

  django
  gunicorn
  django-heroku
  celery
  redis
  celery-with-redis
  django-celery
  kombu

我已将 worker dyno 设置为 1。 有趣的是我可以发誓它以前可以工作,现在由于某种原因它不起作用。

【问题讨论】:

【参考方案1】:

曾经,您在本地设置了一个minimal django-celery-redis 项目,下面是您在heroku 上部署它的方法:

    添加到你的tasks.py:

     import os
    
     app.conf.update(BROKER_URL=os.environ['REDIS_URL'],
        CELERY_RESULT_BACKEND=os.environ['REDIS_URL'])
    

    确保你的 requirements.txt 是这样的:

     django
     gunicorn
     django-heroku
     celery
     redis
    

    添加到您的 Procfile:“worker: celery worker --app=hello.tasks.app”

    确保它仍然在本地运行

    进入终端:“export REDIS_URL=redis://”

    运行“heroku local&”

    运行python

     import hello.tasks
     hello.tasks.add.delay(1,2)
    

应该返回类似:

    <AsyncResult: e1debb39-b61c-47bc-bda3-ee037d34a6c4>

    “heroku 应用程序:创建最小 django-celery-redis”

    “heroku 插件:创建 heroku-redis -a minimum-django-celery-redis”

    “git add .”

    "git commit -m "Demo""

    “git push heroku 大师”

    “heroku 开放&”

    "heroku ps:scale worker=1"

    “heroku 运行 python”

      import hello.tasks
      hello.tasks.add.delay(1, 2)
    

    您应该会在应用程序日志中看到正在运行的任务:“heroku logs -t -p worker”

【讨论】:

以上是关于引发 ConnectionError(self._error_message(e)) kombu.exceptions.OperationalError:连接到 localhost:6379 的错误 的主要内容,如果未能解决你的问题,请参考以下文章

mypy 忽略常规方法中的错误,但在 __init__ 中引发错误

Python异常:ConnectionError 10054远程主机强制关闭现有连接

引发错误但类型有效怎么办?

pyhton抛出自定义的异常

ERROR (ConnectionError): HTTPConnectionPool (Caused by &lt;class &#39;socket.error&#39;

python自定义异常,使用raise引发异常