2016-11-01 3 views
1

저는 장고와 비동기 적으로 전자 메일을 보내기 위해 Celery를 사용하고 있습니다. 작업을 사용하려고 할 때 'str' object has no attribute 'publish_task'이라는 오류가 발생합니다. 로그에서 Celery의 코드에 오류가있는 것 같지만 내 코드도 소스가 될 수 있습니다. 여기 내 로그입니다 또한Django + Celery : 'str'개체에 'publish_task'속성이 없습니다.

Environment: 

Request Method: GET 
Request URL: http://127.0.0.1:8000/reminder/ 

Django Version: 1.8.5 
Python Version: 3.4.3 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'django.contrib.sites', 
'crispy_forms', 
'bootstrap3_datetime', 
'haystack', 
'registration', 
'tinymce', 
'djcelery', 
'djcelery_email', 
'RemindApp', 
'home', 
'BookRoom', 
'GameDev') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
'django.middleware.security.SecurityMiddleware', 
'django.middleware.locale.LocaleMiddleware') 


Traceback: 
File "C:\Users\Tony\Desktop_Files\Envs\ReminderVenv\lib\site-packages\django\core\handlers\base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "C:\Users\Tony\Desktop_Files\Envs\ReminderVenv\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view 
    22.     return view_func(request, *args, **kwargs) 
File "C:\Users\Tony\Desktop_Files\Programming\Django\Reminder\RemindApp\views.py" in index 
    49.          request.user.email) 
File "C:\Users\Tony\Desktop_Files\Envs\ReminderVenv\lib\site-packages\celery\app\task.py" in apply_async 
    565.    **dict(self._get_exec_options(), **options) 
File "C:\Users\Tony\Desktop_Files\Envs\ReminderVenv\lib\site-packages\celery\app\base.py" in send_task 
    350.    task_id = P.publish_task(

Exception Type: AttributeError at /reminder/ 
Exception Value: 'str' object has no attribute 'publish_task' 

, 여기 내 작업입니다 :

Mailer_Send.apply_async(reminder_note, 
         reminder_note.title, 
         request.user, 
         request.user.email) 

답변

1

당신이 할 수있는 '여기

@celery.task 
def Mailer_Send(reminder, reminder_title, user, email): 
    mail = Mailer() 
    mail.send_messages(
     subject = "Time's up! {} is due".format(reminder_title), 
     template = 'reminder/email.html', 
     context = {'user': user, 'post': reminder}, 
     to_emails = [email] 
    ) 
    logger.info('Sending email for reminder: {}'.format(reminder_title)) 

그리고 내가 작업을 사용하기 위해 노력하고있어 어디 그런 식으로 부르십시오.

는이 같은 apply_async 호출 할 필요가 : Calling Celery Tasks

0

당신은 또한 비동기 전에 카운트 다운하는 카운트 변수를 추가 할 수 있습니다

Mailer_Send.apply_async(args=[reminder_note, 
        reminder_note.title, 
        request.user, 
        request.user.email]) 

또는

Mailer_Send.delay(reminder_note, 
        reminder_note.title, 
        request.user, 
        request.user.email) 

이 문서를 참조하십시오 작업이 실행됩니다.

+0

어떻게 도움이 될까요? – GalAbra

관련 문제