2013-05-15 4 views
0

Я пытаюсь назначить задачу для сельдерея делать на заднем плане, но я продолжаю сталкиваться с проблемами.Ошибка Django Celery

Краткий справочник о том, что я сделал до сих пор

Я установил celery и django-celery через easy_install, добавил к INSTALLED_APPS:

'djcelery', 
'kombu.transport.django', 

импортируемого следующий и побежал SyncDB:

import djcelery 
djcelery.setup_loader() 
BROKER_URL = "django://" 

Задача, которую я пытаюсь запустить в фоновом режиме, - сброс пароля. Поэтому, когда пользователь забыл свой пароль, я хочу, чтобы задача отправки электронной почты выполнялась в фоновом режиме, так что я сделал это . Я переместил функцию forget_password с views.py на tasks.py, чтобы он мог работать.

Мои tasks.py:

from django.contrib.auth.views import password_reset 
from django.shortcuts import render 
from celery.decorators import task 

@task() 
def forgot_password(request): 
    if request.method == 'POST': 
     return password_reset(request, 
      from_email=request.POST.get('email')) 
    else: 
     return render(request, 'forgot_password.html') 

Их ничто в views.py Сейчас.

Проблема, хотя я могу отправить электронное письмо, если я потеряю свой пароль. Я не уверен, что он работает в фоновом режиме. То, что я сделал, чтобы проверить, является была:

manage.py celery worker --loglevel=info 

, но я получаю сообщение об ошибке: KeyError: 'processName':

C:\o\17\mysite>manage.py celery worker --loglevel=info 

    -------------- [email protected] v3.0.19 (Chiastic Slide) 
---- **** ----- 
--- * *** * -- Windows-Vista-6.0.6001-SP1 
-- * - **** --- 
- ** ---------- [config] 
- ** ---------- .> broker:  django://localhost// 
- ** ---------- .> app:   default:0x319c930 (djcelery.loaders.DjangoLoader 
) 
- ** ---------- .> concurrency: 2 (processes) 
- *** --- * --- .> events:  OFF (enable -E to monitor this worker) 
-- ******* ---- 
--- ***** ----- [queues] 
    -------------- .> celery:  exchange:celery(direct) binding:celery 


[Tasks] 
    . accounts.tasks.forgot_password 

[2013-05-15 17:49:45,279: WARNING/MainProcess] C:\Python26\lib\site-packages\dja 
ngo_celery-3.0.17-py2.6.egg\djcelery\loaders.py:133: UserWarning: Using settings 
.DEBUG leads to a memory leak, never use this setting in production environments 
! 
    warnings.warn('Using settings.DEBUG leads to a memory leak, never ' 
[2013-05-15 17:49:45,292: WARNING/MainProcess] [email protected] ready. 
[2013-05-15 17:49:45,292: INFO/MainProcess] consumer: Connected to django://loca 
lhost//. 
Traceback (most recent call last): 
    File "C:\Python26\lib\logging\__init__.py", line 754, in emit 
    msg = self.format(record) 
    File "C:\Python26\lib\logging\__init__.py", line 637, in format 
    return fmt.format(record) 
    File "C:\Python26\lib\logging\__init__.py", line 428, in format 
    s = self._fmt % record.__dict__ 
KeyError: 'processName' 
Traceback (most recent call last): 
    File "C:\Python26\lib\logging\__init__.py", line 754, in emit 
    msg = self.format(record) 
    File "C:\Python26\lib\logging\__init__.py", line 637, in format 
    return fmt.format(record) 
    File "C:\Python26\lib\logging\__init__.py", line 428, in format 
    s = self._fmt % record.__dict__ 
KeyError: 'processName' 

Может кто-то пожалуйста, любезно помочь мне скажите мне, если забыли пароль настроен, вероятно, для отправки сообщений электронной почты в фон и почему я получаю эту ошибку KeyError: 'processName'?

+0

Попробуйте manage.py celeryd --llusvel = info –

ответ

1

Прежде всего есть простой способ отправки электронной почты с использованием сельдерея:

django-celery-email

Во-вторых, ваша задача не так. Задача - фоновая работа, а не просмотр. Он должен выполнить заключительную операцию. В вашем случае это отправляет электронное письмо

+0

Я поставил задачу в task.py – donkeyboy72

Смежные вопросы