2017-05-05 5 views
1

J'ai un projet simple de flacon/céleri basé sur this tutorial.Je ne peux pas lancer le serveur de moniteur de fleur pour le projet simple de flacon/céleri

L'arborescence des dossiers est la suivante:

ctest\ 
- templates\ 
    - index.html 
- app.py 
- __init__.py 

Le fichier index.html est:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Sum</title> 
</head> 
<body> 
    <h2>Sum a number with 100</h2> 
    {% for message in get_flashed_messages() %} 
    <p style="color: red;">{{ message }}</p> 
    {% endfor %} 

    <form method="POST"> 
     <p>Use number: <input type="text" name="number" value="{{ number }}"></p> 
     <input type="submit" name="submit" value="Add"> 
     <input type="submit" name="submit" value="Add in 30 secs"> 
    </form> 

</body> 
</html> 

et app.py est:

import os 
from flask import Flask, request, render_template, session, flash, redirect, url_for 
from celery import Celery 
from celery.utils.log import get_task_logger 

logger = get_task_logger(__name__) 

# initialize Flask 
app = Flask(__name__) 

# Celery broker and backend configuration 
app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0' 
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0' 

# Initialize extensions 
app.config['SECRET_KEY'] = 'top-secret!' 

# Initialize Celery 
celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'], backend=app.config['CELERY_RESULT_BACKEND']) 
celery.conf.update(app.config) 


@celery.task() 
def make_async_sum(number): 
    with app.app_context(): 
     logger.info("Executing....!") 
     return int(number) + 100 

@app.route('/', methods=['GET','POST']) 
def index(): 
    # take the number from the form 
    if request.method == 'GET': 
     return render_template('index.html', number=session.get('number','')) 
    number = request.form['number'] 
    session['number'] = number 

    if request.form['submit'] == 'Add': 
     # add now 
     make_async_sum.delay(number) 
     flash('Adding %s to 100'%number) 
    else: 
     # add later 
     make_async_sum.apply_async(args=[number], countdown=30) 
     flash('Adding %s to 100 , in 30 secs' % number) 

    return redirect(url_for('index')) 

if __name__ == '__main__': 
    # use that host to be open from anywhere [cause I want to access it from outside the VM] 
    # use port 8181 [or smthing else] and not 8080 
    app.run(debug=True, host='0.0.0.0', port=8181) 

Il est en cours d'exécution dans une Vagrant VM. Je peux accéder au index.html à partir de mon navigateur hôte. Je peux SSH dans la VM et puiser dans le travailleur pour voir les tâches en cours de traitement avec celery worker -A app.celery --loglevel=info. Mais, je n'arrive pas à démarrer l'outil de surveillance Flower pour ce projet.

J'essaye flower -A ctest à partir du chemin du répertoire juste au-dessus de ctest\ mais j'obtiens l'erreur suivante.

Unknown Celery version 
Traceback (most recent call last): 
    File "/usr/local/bin/flower", line 9, in <module> 
    load_entry_point('flower==0.9.1', 'console_scripts', 'flower')() 
    File "/usr/local/lib/python2.7/dist-packages/flower/__main__.py", line 11, in main 
    flower.execute_from_commandline() 
    File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 279, in execute_from_commandline 
    argv = self.setup_app_from_commandline(argv) 
    File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 489, in setup_app_from_commandline 
    self._handle_user_preload_options(argv) 
    File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 494, in _handle_user_preload_options 
    user_preload = tuple(self.app.user_options['preload'] or()) 
AttributeError: 'Flask' object has no attribute 'user_options' 

Des idées?

Répondre

1

Jetez un oeil à ceux-ci:

  1. AttributeError: 'Flask' object has no attribute 'user_options'
  2. Starting celery in flask: AttributeError: 'Flask' object has no attribute 'user_options'

Ils ont un problème similaire (pas flower bien).

Je voudrais essayer d'appeler fleur comme suit:

celery flower -A ctest.app 

ou

celery flower -A ctest.app.celery 

Bonne chance :)

+0

fleur céleri -A ctest.app.celery a fait l'affaire! Ευχαριστω! –

+0

Pas de problème :)! 'α 'σαι καλά !! –