2017-05-05 59 views
1

我有一個基於this tutorial一個簡單的瓶/芹菜項目。我無法啓動花箴言服務器瓶/芹菜簡單的項目

文件夾樹如下:

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

index.html文件是:

<!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> 

app.py是:

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) 

它是一個流浪VM內運行。我可以從我的主機瀏覽器訪問index.html。我可以在虛擬機中進行SSH連接,然後點擊工作人員以查看正在使用celery worker -A app.celery --loglevel=info處理的任務。

但是,我無法啓動這個項目花的監測工具。

我嘗試flower -A ctest從正上方ctest\的目錄路徑,但我得到以下錯誤。

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' 

任何想法??

回答