使用 Heroku 安装 Celery 和 Redis

Posted

技术标签:

【中文标题】使用 Heroku 安装 Celery 和 Redis【英文标题】:Install Celery & Redis with Heroku 【发布时间】:2017-07-25 11:21:06 【问题描述】:

我使用 Django 1.9、Python 2.7 和 Heroku。

Celery 3 和 Redis 运行良好,直到我切换到 Celery 4.0.2 并更改了配置。

heroku 日志显示以下消息:

2017-03-05T16:34:22.076383+00:00 app[worker.1]: Unknown command: 'celery'

这是我的配置:

__init.py__

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']

settings.py

INSTALLED_APPS = (
    ... 
    'django_celery_beat',
)

if ENVIRONMENT == 'PROD':
    from settings_remote import *
else:
    from settings_local import *

settings_remote.py

from __future__ import unicode_literals, absolute_import
import os
CELERY_BROKER_URL = os.environ['REDIS_URL']
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

celery.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'terradiem.settings')
from django.conf import settings
app = Celery('terradiem')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
    print('Request: 0!r'.format(self.request))

过程文件

web: gunicorn terradiem.wsgi --log-file -
worker: python manage.py celery worker --beat

.env

REDIS_URL=redis://

有什么线索吗?

【问题讨论】:

你在你的应用中附加了redis吗? 【参考方案1】:

在您的 Procfile 中,更改:

worker: python manage.py celery worker --beat

为:

worker: celery -A [nameOfYourApp] worker --beat

并将您的 django 项目的名称放在 [nameOfYourApp] 中。

它响应 Unknown command: 'celery' 因为 manage.py 没有这样的命令名称。

【讨论】:

【参考方案2】:

我昨天遇到了芹菜问题,花了几个小时试图摆脱它。最后,问题是我将项目的 celery 文件命名为 'celery.py'

所以在我的其他文件中,当我像这样引用 celery 库时:

from celery import Celery

它在我的项目的 celery 文件中查找 Celery 类并引发错误。我的解决方案是将文件重命名为 _celery.py。

另外,检查 celery 是否安装在您的服务器环境中。

我怀疑这是你的问题,但不得不提出建议!

【讨论】:

我试过你的建议,但它似乎不起作用。还是谢谢你。

以上是关于使用 Heroku 安装 Celery 和 Redis的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Heroku 上使用 Channels 和 Celery 部署 Django?

Heroku 上的 Celery、RabbitMQ 和 Django:达到内存限制

RabbitMQ 上的 Heroku、Django 和 celery

Heroku 与 Django、Celery 和 CloudAMPQ - 超时错误

Celery / Heroku - 使用 Heroku run python 在后台运行时,延迟()啥也不做

celery multi 在heroku上崩溃