AttributeError: 'Flask' object has no attribute 'user_options'

35,130

Solution 1

The Flask Celery Based Background Tasks page (http://flask.pocoo.org/docs/patterns/celery/) suggests this to start celery:

celery -A your_application worker

The your_application string has to point to your application’s package or module that creates the celery object.

Assuming the code resides in application.py, explicitly pointing to the celery object (not just the module name) avoided the error:

celery -A application.celery worker

Solution 2

This worked for me:

celery -A my_app_module_name.celery worker
Share:
35,130
Ravdeep
Author by

Ravdeep

Updated on August 09, 2020

Comments

  • Ravdeep
    Ravdeep over 3 years

    I am trying to setup this basic example from the following doc:

    http://flask.pocoo.org/docs/patterns/celery/

    But so far I keep getting the below error:

    AttributeError: 'Flask' object has no attribute 'user_options'

    I am using celery 3.1.15.

    from celery import Celery
    
    def make_celery(app):
        celery = Celery(app.import_name, broker=app.config['CELERY_BROKER_URL'])
        celery.conf.update(app.config)
        TaskBase = celery.Task
        class ContextTask(TaskBase):
            abstract = True
            def __call__(self, *args, **kwargs):
                with app.app_context():
                    return TaskBase.__call__(self, *args, **kwargs)
        celery.Task = ContextTask
        return celery
    

    Example:

    from flask import Flask
    
    app = Flask(__name__)
    app.config.update(
        CELERY_BROKER_URL='redis://localhost:6379',
        CELERY_RESULT_BACKEND='redis://localhost:6379'
    )
    celery = make_celery(app)
    
    
    @celery.task()
    def add_together(a, b):
        return a + b
    

    Traceback error:

    Traceback (most recent call last):
      File "/usr/local/bin/celery", line 11, in <module>
        sys.exit(main())
      File "/usr/local/lib/python2.7/dist-packages/celery/__main__.py", line 30, in main
        main()
      File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 81, in main
        cmd.execute_from_commandline(argv)
      File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 769, in execute_from_commandline
        super(CeleryCommand, self).execute_from_commandline(argv)))
      File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 305, in execute_from_commandline
        argv = self.setup_app_from_commandline(argv)
      File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 473, in setup_app_from_commandline
        user_preload = tuple(self.app.user_options['preload'] or ())
    AttributeError: 'Flask' object has no attribute 'user_options'