说明 Heroku Celery 指南
Clarification of guide to Heroku Celery
我正在努力弄清楚那些糟糕的指示here
在 "Configuring a Celery app" 部分下,我不确定代码放在哪里:
import os
app.conf.update(BROKER_URL=os.environ['REDIS_URL'],
CELERY_RESULT_BACKEND=os.environ['REDIS_URL'])
非常感谢对这些说明的任何澄清。
说明表明您应该将该代码放入 tasks.py 模块中。然而,对于多个包来说,这并不是完全可扩展的,每个包都有自己的 tasks.py 模块。我建议在与 settings.py 文件相同的目录中创建一个 celery.py
文件。
# tasks.py
import celery
app = celery.Celery('example')
app.conf.update(BROKER_URL=os.environ['REDIS_URL'],
CELERY_RESULT_BACKEND=os.environ['REDIS_URL'])
或者您可以在 settings.py
中指定您的设置并这样配置 celery:
# settings.py
broker_url = os.environ['REDIS_URL']
result_backend = os.environ['REDIS_URL']
# celery.py
from celery import Celery
from celery.utils.collections import DictAttribute
from celery.loaders.base import BaseLoader
from django.conf import settings
from django.apps import apps
class ProjectLoader(BaseLoader):
def read_configuration(self):
"""Load configuration from Django settings.
This may not be needed to be honest. It's what I use in my project.
"""
return DictAttribute(settings)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")
# CELERY_LOADER must be set in the environment. Setting the ``loader``
# kwarg for the app instance does _not_ do what we need it to.
os.environ.setdefault("CELERY_LOADER", "project.celery:ProjectLoader")
app = Celery("project")
app.config_from_object("django.conf:settings")
app.autodiscover_tasks(lambda: [n.name for n in apps.get_app_configs()])
# Procfile
worker: celery worker --app=project.celery
免责声明,其中一些配置需要针对您的项目进行调整。
以下是我结合说明 here 以及我在网上找到的其他资源制作 最小 heroku/django/celery/redis 项目的步骤.希望有人会觉得这很有用。
在您的终端中,使用 "heroku login" 命令登录 Heroku CLI。
"git clone https://github.com/heroku/python-getting-started.git" 将基本的 django 框架项目复制到本地。
重命名 python-getting-started 为任何名称。
cd 进入这个目录。
运行 以下命令:"pip install -r requirements.txt"
注意:必须正确安装 Postgres 才能使此步骤正常工作。
运行 以下命令:"python manage.py collectstatic"
在Mac上安装redis:"brew install redis"
启动redis服务器:"redis-server&"(最后的&是为了运行它作为后台进程)
测试 Redis 服务器是否 运行ning: "redis-cli ping"。如果它回复“PONG”,那么就可以开始了!
安装芹菜:"pip install celery"
使用以下代码在您的应用程序目录中创建一个 tasks.py 文件:
from celery import Celery
app = Celery('tasks', broker='redis://localhost:6379/0')
@app.task
def add(x, y):
return x + y
"cd .."回到根目录
运行芹菜:"celery worker -A=location of tasks&"
运行: "python manage.py shell" 在你的根目录下。
因为你的任务 celery 服务器已经启动,你现在可以使用它来 运行 你的任务,只需导入 tasks.py 脚本,例如来自 Python 解释器交互模式:
import hello.tasks
hello.tasks.add.delay(1, 1)
这应该是 return 一条异步消息。
- 将本地推送到 heroku master。
** 注意:如果您 运行 "celery worker -A=location of tasks.py&" 并且它给出消息:
consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 61]
Connection refused.
尝试使用以下命令重新启动 redis 服务器:"brew services restart redis"
给你。一个最小的 heroku/django/celery/redis 项目!可以下载here.Instructions on how to deploy this to heroku.
** 注意:在工作项目中,"celery worker" 命令已包含在 Procfile 中。
我正在努力弄清楚那些糟糕的指示here
在 "Configuring a Celery app" 部分下,我不确定代码放在哪里:
import os
app.conf.update(BROKER_URL=os.environ['REDIS_URL'],
CELERY_RESULT_BACKEND=os.environ['REDIS_URL'])
非常感谢对这些说明的任何澄清。
说明表明您应该将该代码放入 tasks.py 模块中。然而,对于多个包来说,这并不是完全可扩展的,每个包都有自己的 tasks.py 模块。我建议在与 settings.py 文件相同的目录中创建一个 celery.py
文件。
# tasks.py
import celery
app = celery.Celery('example')
app.conf.update(BROKER_URL=os.environ['REDIS_URL'],
CELERY_RESULT_BACKEND=os.environ['REDIS_URL'])
或者您可以在 settings.py
中指定您的设置并这样配置 celery:
# settings.py
broker_url = os.environ['REDIS_URL']
result_backend = os.environ['REDIS_URL']
# celery.py
from celery import Celery
from celery.utils.collections import DictAttribute
from celery.loaders.base import BaseLoader
from django.conf import settings
from django.apps import apps
class ProjectLoader(BaseLoader):
def read_configuration(self):
"""Load configuration from Django settings.
This may not be needed to be honest. It's what I use in my project.
"""
return DictAttribute(settings)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")
# CELERY_LOADER must be set in the environment. Setting the ``loader``
# kwarg for the app instance does _not_ do what we need it to.
os.environ.setdefault("CELERY_LOADER", "project.celery:ProjectLoader")
app = Celery("project")
app.config_from_object("django.conf:settings")
app.autodiscover_tasks(lambda: [n.name for n in apps.get_app_configs()])
# Procfile
worker: celery worker --app=project.celery
免责声明,其中一些配置需要针对您的项目进行调整。
以下是我结合说明 here 以及我在网上找到的其他资源制作 最小 heroku/django/celery/redis 项目的步骤.希望有人会觉得这很有用。
在您的终端中,使用 "heroku login" 命令登录 Heroku CLI。
"git clone https://github.com/heroku/python-getting-started.git" 将基本的 django 框架项目复制到本地。
重命名 python-getting-started 为任何名称。
cd 进入这个目录。
运行 以下命令:"pip install -r requirements.txt" 注意:必须正确安装 Postgres 才能使此步骤正常工作。
运行 以下命令:"python manage.py collectstatic"
在Mac上安装redis:"brew install redis"
启动redis服务器:"redis-server&"(最后的&是为了运行它作为后台进程)
测试 Redis 服务器是否 运行ning: "redis-cli ping"。如果它回复“PONG”,那么就可以开始了!
安装芹菜:"pip install celery"
使用以下代码在您的应用程序目录中创建一个 tasks.py 文件:
from celery import Celery app = Celery('tasks', broker='redis://localhost:6379/0') @app.task def add(x, y): return x + y
"cd .."回到根目录
运行芹菜:"celery worker -A=location of tasks&"
运行: "python manage.py shell" 在你的根目录下。
因为你的任务 celery 服务器已经启动,你现在可以使用它来 运行 你的任务,只需导入 tasks.py 脚本,例如来自 Python 解释器交互模式:
import hello.tasks hello.tasks.add.delay(1, 1)
这应该是 return 一条异步消息。
- 将本地推送到 heroku master。
** 注意:如果您 运行 "celery worker -A=location of tasks.py&" 并且它给出消息:
consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 61]
Connection refused.
尝试使用以下命令重新启动 redis 服务器:"brew services restart redis"
给你。一个最小的 heroku/django/celery/redis 项目!可以下载here.Instructions on how to deploy this to heroku.
** 注意:在工作项目中,"celery worker" 命令已包含在 Procfile 中。