I'm using code examples from the 'Django 2 by Example' book to build my e-commerce shop. The view works as it should, but the task never gets executed. There are no errors. Page is freezing on "Waiting for localhost...". What I'm doing wrong in the code?
views.py
import ...
from .tasks import order_created
def order_create(request):
cart = Cart(request)
if request.method == 'POST':
form = OrderCreateForm(request.POST)
if form.is_valid():
order = form.save(commit=False)
if cart.promo_code:
order.promo_code = cart.promo_code
order.discount = cart.promo_code.discount
order.save()
for item in cart:
OrderItem.objects.create(order=order,
book=item['book'],
price=item['price'],
quantity=item['quantity'])
# clear the cart
cart.clear()
print("clean cart")
# set the order in the session
request.session['order_id'] = order.id
print("id - check")
# launch asynchronous task
order_created.delay(order.id) # here I stuck
print("clean cart")
# redirect for payment
return redirect(reverse('payment:process'))
else:
form = OrderCreateForm()
return render(request,
'orders/order/create.html',
{'cart': cart, 'form': form})
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,
'[email protected]',
[order.email])
return mail_sent
I'm using
celery==4.2.0
Django==2.0.7
Ubuntu 18.04
UPDATED:
Added this two lines of code in celery.py. And freezing has disappear, order page now redirects me for further payment prosedure. But the task order_created still not running.
app.conf.broker_url = 'redis://localhost:6379/1'
# app.conf.broker_transport_options = {'visibility_timeout': 3600} # 1 hour.
app.config_from_object('django.conf:settings', namespace='CELERY')
$ redis-cli MONITOR
outputs this:
OK
1531137225.134559 [1 127.0.0.1:48116] "ZREVRANGE" "book:1:purchased_with" "0" "-1"
1531137240.820217 [1 127.0.0.1:48130] "LPUSH" "celery" "{\"body\": \"W1szMV0sIHt9LCB7ImNhbGxiYWNrcyI6IG51bGwsICJlcnJiYWNrcyI6IG51bGwsICJjaGFpbiI6IG51bGwsICJjaG9yZCI6IG51bGx9XQ==\", \"content-encoding\": \"utf-8\", \"content-type\": \"application/json\", \"headers\": {\"lang\": \"py\", \"task\": \"orders.tasks.order_created\", \"id\": \"172d5ec0-9b53-4766-bc04-470631a3a8e4\", \"shadow\": null, \"eta\": null, \"expires\": null, \"group\": null, \"retries\": 0, \"timelimit\": [null, null], \"root_id\": \"172d5ec0-9b53-4766-bc04-470631a3a8e4\", \"parent_id\": null, \"argsrepr\": \"(31,)\", \"kwargsrepr\": \"{}\", \"origin\": \"gen24500@archeski-Inspiron-5558\"}, \"properties\": {\"correlation_id\": \"172d5ec0-9b53-4766-bc04-470631a3a8e4\", \"reply_to\": \"b8b0c8bb-1931-3be2-a044-d588d95c2fe9\", \"delivery_mode\": 2, \"delivery_info\": {\"exchange\": \"\", \"routing_key\": \"celery\"}, \"priority\": 0, \"body_encoding\": \"base64\", \"delivery_tag\": \"249e3deb-489b-4e0b-bde7-54160d3ccaaf\"}}"
1531137464.423873 [0 127.0.0.1:48192] "SELECT" "1"
1531137464.424085 [1 127.0.0.1:48192] "ZREVRANGE" "book:1:purchased_with" "0" "-1"
1531137479.993181 [0 127.0.0.1:48198] "SELECT" "1"
1531137479.993295 [1 127.0.0.1:48198] "PING"
1531137479.994161 [0 127.0.0.1:48200] "SELECT" "1"
1531137479.994260 [1 127.0.0.1:48200] "MULTI"
1531137479.994279 [1 127.0.0.1:48200] "LLEN" "celery"
1531137479.994286 [1 127.0.0.1:48200] "LLEN" "celery\x06\x163"
1531137479.994291 [1 127.0.0.1:48200] "LLEN" "celery\x06\x166"
1531137479.994295 [1 127.0.0.1:48200] "LLEN" "celery\x06\x169"
1531137479.994299 [1 127.0.0.1:48200] "EXEC"
1531137479.994618 [1 127.0.0.1:48200] "SADD" "_kombu.binding.celery" "celery\x06\x16\x06\x16celery"
1531137479.994977 [1 127.0.0.1:48200] "LPUSH" "celery" "{\"body\": \"W1szMl0sIHt9LCB7ImNhbGxiYWNrcyI6IG51bGwsICJlcnJiYWNrcyI6IG51bGwsICJjaGFpbiI6IG51bGwsICJjaG9yZCI6IG51bGx9XQ==\", \"content-encoding\": \"utf-8\", \"content-type\": \"application/json\", \"headers\": {\"lang\": \"py\", \"task\": \"orders.tasks.order_created\", \"id\": \"0fbcecc4-293d-472b-8308-46cb2d9ff345\", \"shadow\": null, \"eta\": null, \"expires\": null, \"group\": null, \"retries\": 0, \"timelimit\": [null, null], \"root_id\": \"0fbcecc4-293d-472b-8308-46cb2d9ff345\", \"parent_id\": null, \"argsrepr\": \"(32,)\", \"kwargsrepr\": \"{}\", \"origin\": \"gen24983@archeski-Inspiron-5558\"}, \"properties\": {\"correlation_id\": \"0fbcecc4-293d-472b-8308-46cb2d9ff345\", \"reply_to\": \"f046e6b8-dd2b-30a4-86a5-0de752377bc7\", \"delivery_mode\": 2, \"delivery_info\": {\"exchange\": \"\", \"routing_key\": \"celery\"}, \"priority\": 0, \"body_encoding\": \"base64\", \"delivery_tag\": \"088bae10-976e-4143-8c28-9ed2e254f2d5\"}}"
1531137480.232213 [1 127.0.0.1:48200] "LPUSH" "celery" "{\"body\": \"W1szM10sIHt9LCB7ImNhbGxiYWNrcyI6IG51bGwsICJlcnJiYWNrcyI6IG51bGwsICJjaGFpbiI6IG51bGwsICJjaG9yZCI6IG51bGx9XQ==\", \"content-encoding\": \"utf-8\", \"content-type\": \"application/json\", \"headers\": {\"lang\": \"py\", \"task\": \"orders.tasks.order_created\", \"id\": \"5aa54a37-95da-43c9-b59e-e6797b7cdd2f\", \"shadow\": null, \"eta\": null, \"expires\": null, \"group\": null, \"retries\": 0, \"timelimit\": [null, null], \"root_id\": \"5aa54a37-95da-43c9-b59e-e6797b7cdd2f\", \"parent_id\": null, \"argsrepr\": \"(33,)\", \"kwargsrepr\": \"{}\", \"origin\": \"gen24983@archeski-Inspiron-5558\"}, \"properties\": {\"correlation_id\": \"5aa54a37-95da-43c9-b59e-e6797b7cdd2f\", \"reply_to\": \"f046e6b8-dd2b-30a4-86a5-0de752377bc7\", \"delivery_mode\": 2, \"delivery_info\": {\"exchange\": \"\", \"routing_key\": \"celery\"}, \"priority\": 0, \"body_encoding\": \"base64\", \"delivery_tag\": \"f78cd769-d7fa-43de-aee9-f7bc5a2c78ac\"}}"
Can you double-check that you imported the Celery app in your __init__.py file like the getting started guide mentions? https://docs.celeryproject.org/en/latest/django/first-steps-with-django.html
I was having a similar issue where everything else looked correct, but the task was hanging when I used .delay()
Adding the import immediately fixed the problem.
maybe this helps :
you have to update project conf folder init.py file:
from __future__ import absolute_import
# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With