2016-11-01 1 views
1

Я использую сельдерей для отправки асинхронных сообщений с Django. Когда я пытаюсь использовать задачу, я получаю сообщение об ошибке 'str' object has no attribute 'publish_task'. Из журналов кажется, что ошибка кроется в коде Сербеля, но мой код также может быть источником. Вот мои журналы: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' 

Кроме того, здесь моя задача:

@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)) 

А вот где я пытаюсь использовать задачу:

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

ответ

1

Вы можете» Так называйте это.

Вам нужно позвонить apply_async так:

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) 

Смотрите документацию: Calling Celery Tasks

0

Вы можете также добавить переменную обратного отсчета, который будет обратный отсчет времени до вашего асинхронном задача выполнена.

+0

Как это поможет? – GalAbra

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

  • Нет связанных вопросов^_^