使用 Heroku 安装 Celery 和 Redis
Install Celery & Redis with Heroku
我使用 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))
Procfile
web: gunicorn terradiem.wsgi --log-file -
worker: python manage.py celery worker --beat
.env
REDIS_URL=redis://
有线索吗?
昨天我在芹菜上遇到了问题,我花了好几个小时试图摆脱它。最后,问题是我将项目的芹菜文件命名为'celery.py'。
所以在我的其他文件中,当我像这样引用 celery 库时:
from celery import Celery
它在我项目的芹菜文件中查找 Celery class 并引发错误。我的解决方案是将文件重命名为 _celery.py。
此外,请检查您的服务器环境中是否安装了 celery。
我怀疑这是你的问题,但不得不提出建议!
在您的 Procfile 中,更改:
worker: python manage.py celery worker --beat
用于:
worker: celery -A [nameOfYourApp] worker --beat
并将您的 Django 项目名称放入 [nameOfYourApp]。
它响应 Unknown command: 'celery'
因为 manage.py 没有这样的命令名称。
我使用 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))
Procfile
web: gunicorn terradiem.wsgi --log-file -
worker: python manage.py celery worker --beat
.env
REDIS_URL=redis://
有线索吗?
昨天我在芹菜上遇到了问题,我花了好几个小时试图摆脱它。最后,问题是我将项目的芹菜文件命名为'celery.py'。
所以在我的其他文件中,当我像这样引用 celery 库时:
from celery import Celery
它在我项目的芹菜文件中查找 Celery class 并引发错误。我的解决方案是将文件重命名为 _celery.py。
此外,请检查您的服务器环境中是否安装了 celery。
我怀疑这是你的问题,但不得不提出建议!
在您的 Procfile 中,更改:
worker: python manage.py celery worker --beat
用于:
worker: celery -A [nameOfYourApp] worker --beat
并将您的 Django 项目名称放入 [nameOfYourApp]。
它响应 Unknown command: 'celery'
因为 manage.py 没有这样的命令名称。