2016-11-01 16 views
1

私はDjangoと電子メールを非同期で送信するために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' 

また、ここでの私の仕事は、次のとおりです。私は、タスクを使用しようとしているところ

@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

することができます」そのように呼んでください。また、あなたの非同期の前にカウントダウンしますカウントダウン変数を追加することができます Calling Celery Tasks

0

:あなたはこのよう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) 

は、ドキュメントを参照してください。タスクが実行されます。

+0

これはどのように役立ちますか? – GalAbra

関連する問題