首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我无法启动Flask/Celery简单项目的Flower监控服务器

我无法启动Flask/Celery简单项目的Flower监控服务器
EN

Stack Overflow用户
提问于 2017-05-05 19:48:28
回答 1查看 1.7K关注 0票数 1

我有一个简单的基于this tutorial的烧瓶/芹菜项目。

文件夹树如下所示:

代码语言:javascript
复制
ctest\  
- templates\  
  - index.html  
- app.py  
- __init__.py  

index.html文件为:

代码语言:javascript
复制
<!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是:

代码语言:javascript
复制
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)

它在Vagrant VM中运行。我可以从我的主机浏览器访问index.html。我可以在VM中使用SSH,然后进入worker来查看celery worker -A app.celery --loglevel=info正在处理的任务。

但是,我不能为这个项目启动Flower监控工具。

我尝试从ctest\之上的目录路径执行flower -A ctest,但得到以下错误。

代码语言:javascript
复制
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'

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-05 20:25:54

让我们看看这些:

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

他们也有类似的问题(但不是flower )。

我会尝试调用flower,如下所示:

代码语言:javascript
复制
celery flower -A ctest.app

代码语言:javascript
复制
celery flower -A ctest.app.celery
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43804193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档