【问题标题】:Celery not connecting to redis server芹菜没有连接到redis服务器
【发布时间】:2019-04-05 05:36:09
【问题描述】:

我有一个使用 celery==4.2.1、redis==2.10.6、redis-server=4.0.9 的 django 2.0.5 应用程序。当我启动 celery worker 时,我得到这个输出:

-------------- celery@octopus v4.2.1 (windowlicker)
---- **** ----- 
--- * ***  * -- Linux-4.18.16-surface-linux-surface-x86_64-with-Ubuntu-18.04-bionic 2018-10-31 17:33:50
-- * - **** --- 
- ** ---------- [config]
- ** ---------- .> app:         MemorabiliaJSON:0x7fd6c537b240
- ** ---------- .> transport:   amqp://guest:**@localhost:5672//
- ** ---------- .> results:     disabled://
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery

但在我的 django 设置中,我有:

CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_IMPORTS = ('memorabilia.tasks',
                  'face_recognition.tasks',
                  )

我的 celery.py 看起来像:

# http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from django.apps import apps
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MemorabiliaJSON.settings.tsunami')

app = Celery('MemorabiliaJSON')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks(lambda: [n.name for n in apps.get_app_configs()])

相同的代码(通过我的 git 服务器共享)在我的开发机器上工作,虽然 redis 服务器有点旧 - v=2.8.4。开发机是Ubuntu 14.04,笔记本是Ubuntu 18.04。通过作品,我的意思是这是我的开发机器上的芹菜输出:

 -------------- celery@tsunami v4.2.1 (windowlicker)
---- **** ----- 
--- * ***  * -- Linux-4.4.0-138-generic-x86_64-with-Ubuntu-14.04-trusty 2018-10-31 17:38:09
-- * - **** --- 
- ** ---------- [config]
- ** ---------- .> app:         MemorabiliaJSON:0x7f356e024c18
- ** ---------- .> transport:   redis://localhost:6379//
- ** ---------- .> results:     redis://localhost:6379/
- *** --- * --- .> concurrency: 8 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery

除了我在 celery.py 中的内容之外,我如何让 celery 读取 django 配置文件?

谢谢!

标记

【问题讨论】:

  • 忘了补充说redis-server正在运行,我可以调用redis-cli ping得到PONG响应。

标签: django redis celery


【解决方案1】:

localhost 更改为127.0.0.1 解决了我的问题:

CELERY_BROKER_URL = 'redis://127.0.0.1:6379'
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_STORE_ERRORS_EVEN_IF_IGNORED = True

【讨论】:

  • 这对我有用,我在这个问题上浪费了我的 1 天时间。
【解决方案2】:

我正在使用 celery 和 redis。遇到了同样的问题,我已经解决了

在你的 celery.py 中转到行

 app.config_from_object("django.conf:settings", namespace="CELERY")

你只需要删除 namespace="CELERY" 最后你的代码应该是

     app.config_from_object("django.conf:settings")

这对我来说很完美。 firstly it was like this

还有After update above settings

【讨论】:

    【解决方案3】:

    如果您仔细查看celery@octopus 的 celery 输出,您会发现它连接到 amqp 代理而不是 redis 代理:amqp://guest:**@localhost:5672//。这意味着您的 octopus worker 已在某处配置为指向 rabbitmq 代理,而不是 redis 代理。为了纠正这个问题,您必须找到 rabbitmq 代理配置设置的位置,并查看它是如何被拉入 celery 的。因为 broker_url 告诉我们的是 celery 正在其他地方重新配置,或者服务器上正在应用其他设置。

    【讨论】:

    • 我看到 celery 正在尝试连接 rabbitmq。但是,rabbitmq 没有安装。如上图所示,为redis配置了celery。
    【解决方案4】:

    请更新CELERY_BROKER_URL,如下所示:

    CELERY_BROKER_URL = 'redis://localhost:6379/0'
    CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
    

    您可以在here 中查看有关将 Redis 连接为代理的文档。

    【讨论】:

      【解决方案5】:

      为了结束这个问题,我会回答它。老实说,我不确定我是如何解决这个问题的,但是在我的系统进行了一些更改和重新启动后,它就消失了。设置仍然与上面相同。

      我后来发现我在命名模块时遇到了问题,因为两个模块具有相同的名称。一旦我纠正了这个问题,我的大多数其他芹菜问题就消失了。但是,需要明确的是,在我修复模块命名问题之前,redis/celery 部分正在工作。

      感谢所有对我的问题提出建议的人!

      【讨论】:

        【解决方案6】:

        与您如何解决它完全无关,但我遇到了类似的问题,配置中的“传输”url 正在寻找端口 5672(而不是 redis 的 6379,结果 url 是正确的)。在之前调试时,我从 app.config_from_object 中删除了命名空间。放回去解决了我的问题。把它放在这里给任何犯同样错误并来到这里的人

        【讨论】:

          猜你喜欢
          • 2020-06-29
          • 2013-11-17
          • 1970-01-01
          • 2013-06-09
          • 1970-01-01
          • 2019-04-23
          • 2021-06-23
          • 2013-02-25
          • 2017-03-01
          相关资源
          最近更新 更多