web-dev-qa-db-de.com

AttributeError: 'Flask'-Objekt hat kein Attribut' user_options '

Ich versuche, dieses grundlegende Beispiel aus dem folgenden Dokument zu erstellen:

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

Aber bis jetzt bekomme ich immer den folgenden Fehler:

AttributeError: 'Flask'-Objekt hat kein Attribut' user_options '

Ich verwende Sellerie 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

Beispiel:

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-Fehler:

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'
30
Ravdeep

Die Seite Flick Sellerie-basierte Hintergrundaufgaben ( http://flask.pocoo.org/docs/patterns/celery/ ) schlägt Folgendes vor, um Sellerie zu starten:

celery -A your_application worker

Die Zeichenfolge your_application muss auf das Paket oder das Modul Ihrer Anwendung verweisen, mit dem das Sellerieobjekt erstellt wird.

Angenommen, der Code befindet sich in application.py, wurde der Fehler explizit auf das Sellerieobjekt (nicht nur auf den Modulnamen) gezeigt:

celery -A application.celery worker

74
TomL

Das hat für mich funktioniert:

celery -A my_app_module_name.celery worker
0
sri