2015-09-23 9 views
0

Я пытаюсь создать фоновую работу с RQ:RQ AttributeError: «модуль» объект не имеет атрибута

import django_rq               


    def _send_password_reset_email_async(email):        
     print(email)               

    # Django admin action to send reset password emails                 
    def send_password_reset_email(modeladmin, request, queryset):    
     for user in queryset:             
      django_rq.enqueue(_send_password_reset_email_async, user.email) 
    send_password_reset_email.short_description = 'Send password reset email' 

Я получаю эту ошибку, хотя и кажется, что я делаю что-то глупое?

Traceback (most recent call last): 
    File "/home/lee/Code/cas/venv/lib/python3.4/site-packages/rq/worker.py", line 568, in perform_job 
    rv = job.perform() 
    File "/home/lee/Code/cas/venv/lib/python3.4/site-packages/rq/job.py", line 

495, in perform 
    self._result = self.func(*self.args, **self.kwargs) 
    File "/home/lee/Code/cas/venv/lib/python3.4/site-packages/rq/job.py", line 206, in func 
    return import_attribute(self.func_name) 
    File "/home/lee/Code/cas/venv/lib/python3.4/site-packages/rq/utils.py", line 151, in import_attribute 
    return getattr(module, attribute) 
AttributeError: 'module' object has no attribute '_send_password_reset_email_async 

'

ответ

0

Как насчет заключая _send_password_reset_email_async внутри функции reset_email -

def send_password_reset_email(modeladmin, request, queryset): 
    def _send_password_reset_email_async(email):        
     print(email) 

    for user in queryset:             
     django_rq.enqueue(_send_password_reset_email_async, user.email) 

send_password_reset_email.short_description = 'Send password reset email' 
+0

Я получаю ту же ошибку – Lee

3

Добавление комментария как я тоже столкнулся с этой ошибкой:

Дев веб-сервер Django динамически rereloads когда вы меняете свой код, но процесс rqworker не работает. Поэтому, если вы добавите/измените задачу &, немедленно вызовите ее, вы можете столкнуться с этой ошибкой, так как новый код (ваш веб-код) пытается вызвать старый код (задача RQ).

Остановить/перезапустить rqworker, и все в порядке.

0

Копирование замечание @richardbarran в https://github.com/ui/django-rq/issues/125

Rqworker does not dynamically reload when you change your code, but the Django dev webserver does So if you add/modify a task & immediately call it, you may run into this error as the new code (your web code) tries to call the old code (the RQ task).

Stop/restart rqworker and you're ok.

0

У меня была аналогичная проблема, и убедившись, что импортировать модуль в __init__.py из приложения фиксированной проблемы.