Python 西芹指南澄清

Python 西芹指南澄清,python,django,heroku,celery,Python,Django,Heroku,Celery,我正试图弄明白那些令人悲哀的指示 在“配置芹菜应用程序”一节下,我不确定代码放在哪里: import os app.conf.update(BROKER_URL=os.environ['REDIS_URL'], CELERY_RESULT_BACKEND=os.environ['REDIS_URL']) 非常感谢您对这些说明所做的任何澄清。这些说明表明您应该将该代码放入tasks.py模块中。但是,对于多个包来说,这并不完全是可扩展的,每个包都有自己的tasks.py模

我正试图弄明白那些令人悲哀的指示

在“配置芹菜应用程序”一节下,我不确定代码放在哪里:

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

非常感谢您对这些说明所做的任何澄清。

这些说明表明您应该将该代码放入tasks.py模块中。但是,对于多个包来说,这并不完全是可扩展的,每个包都有自己的tasks.py模块。我建议您在settings.py文件所在的目录中创建一个
芹菜.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
中指定设置,并将芹菜配置为:

# 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

免责声明,其中一些配置将需要为您的项目进行调整。

以下是我采取的步骤,结合说明以及我在web上找到的其他来源,创建一个最小的heroku/django/Cellery/redis项目。希望有人会觉得这很有用

  • 在终端中,使用“heroku login”命令登录到heroku CLI

  • “git克隆”将基本django骨架项目复制到本地

  • 将python重命名为“入门”

  • 将cd放入此目录

  • 运行以下命令:“pip安装-r requirements.txt” 注意:必须正确安装Postgres才能使此步骤正常工作

  • 运行以下命令:“python manage.py collectstatic”

  • 在Mac上安装redis:“brew安装redis”

  • 启动redis server:“redis server&”(&结尾是作为后台进程运行)

  • 测试Redis服务器是否正在运行:“Redis cli ping”。如果它回答“PONG”,那就好了

  • 安装芹菜:“pip安装芹菜”

  • 使用以下代码在应用程序目录中创建tasks.py文件:

     from celery import Celery
    
     app = Celery('tasks', broker='redis://localhost:6379/0')
    
     @app.task
     def add(x, y):
         return x + y
    
  • “cd..”返回到根目录

  • 运行芹菜:“芹菜工人-A=任务位置&”

  • 在根目录中运行:“python manage.py shell”

  • 随着tasks芹菜服务器的启动,您现在可以通过导入tasks.py脚本(例如从Python解释器交互模式)来使用它运行任务:

    import hello.tasks
    hello.tasks.add.delay(1, 1)
    
  • 这将返回一条异步消息

  • 将您的本地地址发送给heroku master
  • **注意:如果运行“芹菜工人-A=location of tasks.py&”,它会显示以下消息:

    consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 61]           
    Connection refused.
    
    尝试使用命令“brew services restart redis”重新启动redis服务器


    给你。一个最小的heroku/django/芹菜/redis项目!你可以下载它


    **注意:在工作项目中,“芹菜工人”命令已经包含在Procfile中。

    谢谢您的回复。现在,我不断地得到错误:raisekeyerror(key)from None KeyError:“REDIS_URL”from my tasks.pyfyi,我已经为REDIS_URL设置了.env,听起来您需要了解为什么该文件没有加载到您的环境中。