我正在使用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代码本身的某个点上,而不是在我的应用程序中。如何在此处获取堆栈跟踪以更好地进行故障排除?
答案 0 :(得分:3)
WSGI应用程序(Flask是),是一个可调用对象。这就是uWSGI期望传递给callable
的内容。您正在传递一个也可以调用的应用工厂,但是您需要将该调用的结果传递给它,因为应用工厂本身不是WSGI应用程序。
可以在配置中直接调用工厂功能。 module
和callable
选项也可以仅module
合并。
module = my_app:create_app()
这告诉uWSGI导入my_app
,找到my_app.create_app
并调用它。结果是,Flask应用程序实际上用作可调用的。
答案 1 :(得分:1)
找到答案:我使用callable = create_app
配置了uwsgi,这是一个返回Flask"应用程序"的函数。但是uwsgi实际上想要应用程序对象。