簡體   English   中英

Celery 任務不會在 django 中執行

[英]Celery task will not execute in django

我以 django 3 為例來學習 Django 。 我想用 celery 啟動異步任務。 我設置了設置,但任務不會執行。 我使用 rabbit mq 作為代理,我使用 windows。 這是我的代碼:

celery.py

import os
from celery import Celery

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

app = Celery('Onlineshop')

app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

初始化.py

from .celery import app as celery_app

__all__ = ('celery_app',)

任務.py

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


@shared_task
def order_created(order_id):
    """Task to send an e-mail notification when order is successfully created."""
    order = Order.objects.get(id=order_id)
    subject = f'Order nr. {order.id}'
    message = f'Dear {order.first_name},\n\n' \
              f' You have successfully placed an order.' \
              f'Your order ID is {order.id}'

    mail_sent = send_mail(subject, message, 'admin@onlineshop.com', [order.email])
    return mail_sent

視圖.py

from django.contrib.auth.decorators import login_required
from django.shortcuts import render
from .models import OrderItem
from .forms import OrderCreateForm
from cart.cart import Cart
from .tasks import order_created


# Create your views here.
@login_required
def order_create(request):
    cart = Cart(request)
    if request.method == 'POST':
        user = request.user
        form = OrderCreateForm(request.POST)
        if form.is_valid():
            order = form.save(commit=False)
            order.user = user
            order.save()
            for item in cart:
                OrderItem.objects.create(order=order, product=item['product'], price=item['price'],
                                         quantity=item['quantity'])
            context = {
                'order': order,
            }
            # clear the cart
            cart.clear()
            # launch asynchronous task
            order_created.delay(order.id)
            return render(request, 'order/created.html', context)
    else:
        form = OrderCreateForm()
    context = {'cart': cart,
               'form': form,
               }
    return render(request, 'order/create.html', context)

這是我認為的問題,我稱之為 order_created function 但任務不會執行,並且我的控制台中沒有 email 。 我的 email 設置是正確的,因為我的應用程序中的其他電子郵件有效。 我使用花來監控 celery,在花面板中顯示任務正在執行,但沒有 email。 如果有任何機構可以提供幫助,我會很高興

好的,通過運行命令 Rabbitmq-server restart 並通過運行命令 Celery -A app_name worker --loglevel=info 讓 celery 連接到服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM