Issue
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\"}}"
Solution
I am studying celery too and started two days ago. My experience is that, you need to independently deploy your celery well before you integrate it into your web application.
After the visit to the celery doc page I was able to successfully start my celery application.
Start from the simplest demo.
Answered By - Carl Lee
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.