【发布时间】:2017-11-14 17:36:10
【问题描述】:
我使用以下命令安装了 Celery 和 RabbitMQ:
pip install celery 和 sudo 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