【问题标题】:Celery and Rabbit MQ Django芹菜和兔子 MQ Django
【发布时间】:2017-11-14 17:36:10
【问题描述】:

我使用以下命令安装了 Celery 和 RabbitMQ: pip install celerysudo apt-get install rabbitmq。 芹菜不起作用;我收到此错误:

Traceback (most recent call last):
  File "/home/morilon/dj/shop/lib/python3.5/site-
packages/celery/app/utils.py", line 361, in find_app
    found = sym.app
AttributeError: module 'myshop' has no attribute 'app'

在处理上述异常的过程中,又发生了一个异常:

Traceback (most recent call last):
  File "/home/morilon/dj/shop/bin/celery", line 11, in <module>
    sys.exit(main())
 File "/home/morilon/dj/shop/lib/python3.5/site-packages/celery/__main__.py", line 14, in main
    _main()
  File "/home/morilon/dj/shop/lib/python3.5/site-packages/celery/bin/celery.py", line 326, in main
    cmd.execute_from_commandline(argv)
  File "/home/morilon/dj/shop/lib/python3.5/site-packages/celery/bin/celery.py", line 488, in execute_from_commandline
    super(CeleryCommand, self).execute_from_commandline(argv)))
  File "/home/morilon/dj/shop/lib/python3.5/site-packages/celery/bin/base.py", line 279, in execute_from_commandline
    argv = self.setup_app_from_commandline(argv)
  File "/home/morilon/dj/shop/lib/python3.5/site-packages/celery/bin/base.py", line 481, in setup_app_from_commandline
    self.app = self.find_app(app)
  File "/home/morilon/dj/shop/lib/python3.5/site-packages/celery/bin/base.py", line 503, in find_app
    return find_app(app, symbol_by_name=self.symbol_by_name)
  File "/home/morilon/dj/shop/lib/python3.5/site-packages/celery/app/utils.py", line 366, in find_app
    found = sym.celery
AttributeError: module 'myshop' has no attribute 'celery'

我不明白该怎么办?

tasks.py

from celery import task
from django.core.mail import send_mail
from .models import Order

@task
def order_created(order_id):
    """
    Task to send an e-mail notification when an order is successfully created.
    """
    order = Order.objects.get(id=order_id)
    subject = 'Order nr. {}'.format(order.id)
    message = 'Dear {},\n\nYou have successfully placed an order. Your order id is {}.'.format(order.first_name,
                                                                             order.id)
    mail_sent = send_mail(subject, message, 'admin@myshop.com', [order.email])
    return mail_sent

celery.py

import os
from celery import Celery
from django.conf import settings

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myshop.settings')

app = Celery('myshop')

app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

初始化.py

从 .celery 导入应用程序为 celery_app

GitHub上的这个项目https://github.com/Loctarogar/Django-by-Example

【问题讨论】:

  • 它看起来像一个导入错误,源于您尝试执行类似 "from myshop.celery import..." 之类的操作。您可以发布其余的 Django 代码吗?也许是“myshop”应用程序的内容?特别是如果你有一个 tasks.py 文件
  • 我尝试通过《Django by Example》一书来学习 Django。所以我从书中获取的所有代码。
  • 嗯,好的,下一个问题:看起来该错误可能来自 init.py 文件中的行,因为它找不到 celery 文件。你能发布你的项目布局吗?具体来说,最好仔细检查您的 init.py 文件和 celery.py 文件是否处于同一级别。如果不是,您不需要移动文件,但您需要更改“from .celery import app as celery_app”行。这 ”。”意味着 celery 文件与您的 init.py 文件位于同一文件夹中,所以如果不是这种情况,那就是导致您的错误的原因。
  • 您好,我创建了一个 GitHub 帐户。这是我的项目的链接github.com/Loctarogar/Django-by-Example

标签: django ubuntu rabbitmq celery


【解决方案1】:

尝试在settings.py 所在的项目目录中仔细检查文件celery.py 的拼写

或者您可以关注THIS 使用 celery 和 Django 的文档以获得更多解释

您也可以查看this post

【讨论】:

    【解决方案2】:

    导入 celery 应用的 __init__.py 文件在哪里?它在shop/myshop/ 目录中吗?所以它需要在 myshop 应用程序中才能在启动时加载 celery 应用程序。

    【讨论】:

    • 嗨,你能帮我吗?我该如何结束这个问题?
    猜你喜欢
    • 2012-05-01
    • 2013-02-24
    • 1970-01-01
    • 2020-08-25
    • 2015-01-10
    • 2015-02-17
    • 2021-11-29
    • 1970-01-01
    • 2022-06-28
    相关资源
    最近更新 更多