uwsgi上的Flask应用程序给出了一个TypeError:'Flask'对象不可迭代

时间:2016-03-22 15:43:55

标签: python flask uwsgi

我正在使用Arch Linux上的virtualenv在Python 3.5上运行Python / Flask应用程序。该应用程序由一个通过套接字连接到Nginx的uwsgi服务器运行。

当我执行请求时,我收到以下uwsgi错误:

Mar 23 02:38:19 saltminion1.local uwsgi[20720]: TypeError: 'Flask' object is not iterable

这是uwsgi配置使用的可调用对象:

def create_app(config=None, import_name=None):
    if import_name is None:
        import_name = DefaultConfig.PROJECT

    app = Flask(import_name, instance_path=INSTANCE_FOLDER_PATH, instance_relative_config=True)

    configure_app(app, config)
    configure_database(app)
    configure_logging(app)
    configure_error_handlers(app)
    configure_blueprints(app)

    return app

当我在本地OS X开发工作站和Arch / Ubuntu流浪盒上使用内置HTTP服务器启动应用程序时,工作正常。

问题是:在添加调试语句之后,很明显错误发生在Flask代码本身的某个点上,而不是在我的应用程序中。如何在此处获取堆栈跟踪以更好地进行故障排除?

2 个答案:

答案 0 :(得分:3)

WSGI应用程序(Flask是),是一个可调用对象。这就是uWSGI期望传递给callable的内容。您正在传递一个也可以调用的应用工厂,但是您需要将该调用的结果传递给它,因为应用工厂本身不是WSGI应用程序。

可以在配置中直接调用工厂功能。 modulecallable选项也可以仅module合并。

module = my_app:create_app()

这告诉uWSGI导入my_app,找到my_app.create_app并调用它。结果是,Flask应用程序实际上用作可调用的。

答案 1 :(得分:1)

找到答案:我使用callable = create_app配置了uwsgi,这是一个返回Flask"应用程序"的函数。但是uwsgi实际上想要应用程序对象。