bprinty / Flask-Execute

A Simpler Pattern for Using Celery with Flask
https://flask-execute.readthedocs.io/en/latest/
MIT License
13 stars 1 forks source link

AttributeError: 'DisabledBackend' object has no attribute '_get_task_meta_for' #21

Closed ralfeus closed 3 years ago

ralfeus commented 3 years ago

I use RabbitMQ as a message broker, for which as far as I understand RPC backend can be used. If I specify CELERY_RESULT_BACKEND = 'rpc://' and try to get result I gen an error:

Traceback (most recent call last): File "/var/www/order/lib/python3.6/site-packages/flask/app.py", line 2464, in call return self.wsgi_app(environ, start_response) File "/var/www/order/lib/python3.6/site-packages/flask/app.py", line 2450, in wsgi_app response = self.handle_exception(e) File "/var/www/order/lib/python3.6/site-packages/flask/app.py", line 1867, in handle_exception reraise(exc_type, exc_value, tb) File "/var/www/order/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise raise value File "/var/www/order/lib/python3.6/site-packages/flask/app.py", line 2447, in wsgi_app response = self.full_dispatch_request() File "/var/www/order/lib/python3.6/site-packages/flask/app.py", line 1952, in full_dispatch_request rv = self.handle_user_exception(e) File "/var/www/order/lib/python3.6/site-packages/flask/app.py", line 1821, in handle_user_exception reraise(exc_type, exc_value, tb) File "/var/www/order/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise raise value File "/var/www/order/lib/python3.6/site-packages/flask/app.py", line 1950, in full_dispatch_request rv = self.dispatch_request() File "/var/www/order/lib/python3.6/site-packages/flask_debugtoolbar/init.py", line 125, in dispatch_request return view_func(**req.view_args) File "/var/www/order/app/routes/client.py", line 111, in test result = {'state': task.state} File "/var/www/order/lib/python3.6/site-packages/flask_execute/futures.py", line 32, in getattr return getattr(self.proxy, key) File "/var/www/order/lib/python3.6/site-packages/celery/result.py", line 477, in state return self._get_task_meta()['status'] File "/var/www/order/lib/python3.6/site-packages/celery/result.py", line 416, in _get_task_meta return self._maybe_set_cache(self.backend.get_task_meta(self.id)) File "/var/www/order/lib/python3.6/site-packages/celery/backends/base.py", line 519, in get_task_meta meta = self._get_task_meta_for(task_id) AttributeError: 'DisabledBackend' object has no attribute '_get_task_meta_for'

I read this error occurs when no backend is specified. So I've ensured it is. If I start celery manually I get this:

(order) ralfeus@sandlet /v/w/order> celery -A flask_execute.ext.celery worker INFO:app:<class 'app.config.Config'> INFO:app:None INFO:app:Blueprints are registered

-------------- celery@sandlet v5.0.1 (singularity) --- * ----- -- *** ---- Linux-5.4.0-51-generic-x86_64-with-Ubuntu-18.04-bionic 2020-10-19 14:08:14

  • ** --- ---
  • ** ---------- [config]
  • ** ---------- .> app: app:0x7fa63503f198
  • ---------- .> transport: amqp://guest:@localhost:5672//
  • ---------- .> results: rpc://**
  • --- --- .> concurrency: 4 (prefork) -- **** ---- .> task events: OFF (enable -E to monitor tasks in this worker) --- ----- -------------- [queues] .> celery exchange=celery(direct) key=celery

So it's obvious the results backend is registered. Same happens when I specify Redis as a message broker and a result backend.

bprinty commented 3 years ago

Thanks for the heads up! I'll try to reproduce this locally and let you know what I find.

bprinty commented 3 years ago

Can you post the part of your app config that contains the CELERY... variables and how you're setting up the plugin in your app? I'm not having issues locally using a different backend. Thanks!