Gunicorn 无法启动 Flask 应用程序,因为 "Application object must be callable"
Gunicorn won't start Flask app because "Application object must be callable"
这可能是一个 Python 菜鸟问题,但在搜索了一整天后,我找不到解决方案。
我创建了一个简单的 Flask 应用程序,这里是 python_pgfutter_importer/app.py:
的摘录
import os
from flask import Flask, Blueprint
from python_pgfutter_importer import settings
from python_pgfutter_importer.api.importer.business import import_csv
from python_pgfutter_importer.api.importer.endpoints.csv import ns as csv_importer_namespace
from python_pgfutter_importer.api.restplus import api
app = Flask(__name__)
def initialize_app(flask_app):
blueprint = Blueprint('api', __name__, url_prefix='/api')
api.init_app(blueprint)
api.add_namespace(csv_importer_namespace)
flask_app.register_blueprint(blueprint)
def main():
initialize_app(app)
app.run(debug=settings.FLASK_DEBUG, use_reloader=settings.FLASK_USE_RELOADER)
if __name__ == "__main__":
main()
应用程序运行良好,我使用以下命令启动它:
python python_pgfutter_importer/app.py
现在我必须在服务器上托管这个应用程序,因此我必须使用 WSGI。使用我能找到的所有教程,我编写了这个 WSGI 入口点 (wsgi.py):
from python_pgfutter_importer import app as application
if __name__ == "__main__":
application.main()
启动 Gunicorn 时,CLI 输出如下:
$gunicorn -b 127.0.0.1:8000 wsgi:application
[2018-11-12 09:15:48 +0100] [11782] [INFO] Starting gunicorn 19.9.0
[2018-11-12 09:15:48 +0100] [11782] [INFO] Listening at: http://127.0.0.1:8000 (11782)
[2018-11-12 09:15:48 +0100] [11782] [INFO] Using worker: sync
[2018-11-12 09:15:48 +0100] [11785] [INFO] Booting worker with pid: 11785
Application object must be callable.
[2018-11-12 09:15:48 +0100] [11782] [INFO] Shutting down: Master
[2018-11-12 09:15:48 +0100] [11782] [INFO] Reason: App failed to load.
看来问题是:应用程序对象必须是可调用的。
这没有任何意义,因为应用程序是 Flask,当然是可调用的。
我可以缺少什么?
谢谢
鉴于您的路径是 python_pgfutter_importer/app.py
,您在 wsgi.py
中的导入似乎已关闭:
from python_pgfutter_importer import app as application
这使application
成为一个模块对象,你需要的是一个应用程序:
from python_pgfutter_importer.app import app as application
或者,如果您将 Gunicorn 命令行中的 wsgi:application
更改为 python_pgfutter_importer.app:app
,您可能会取消 wsgi.py
。 Docs.
这可能是一个 Python 菜鸟问题,但在搜索了一整天后,我找不到解决方案。
我创建了一个简单的 Flask 应用程序,这里是 python_pgfutter_importer/app.py:
的摘录import os
from flask import Flask, Blueprint
from python_pgfutter_importer import settings
from python_pgfutter_importer.api.importer.business import import_csv
from python_pgfutter_importer.api.importer.endpoints.csv import ns as csv_importer_namespace
from python_pgfutter_importer.api.restplus import api
app = Flask(__name__)
def initialize_app(flask_app):
blueprint = Blueprint('api', __name__, url_prefix='/api')
api.init_app(blueprint)
api.add_namespace(csv_importer_namespace)
flask_app.register_blueprint(blueprint)
def main():
initialize_app(app)
app.run(debug=settings.FLASK_DEBUG, use_reloader=settings.FLASK_USE_RELOADER)
if __name__ == "__main__":
main()
应用程序运行良好,我使用以下命令启动它:
python python_pgfutter_importer/app.py
现在我必须在服务器上托管这个应用程序,因此我必须使用 WSGI。使用我能找到的所有教程,我编写了这个 WSGI 入口点 (wsgi.py):
from python_pgfutter_importer import app as application
if __name__ == "__main__":
application.main()
启动 Gunicorn 时,CLI 输出如下:
$gunicorn -b 127.0.0.1:8000 wsgi:application
[2018-11-12 09:15:48 +0100] [11782] [INFO] Starting gunicorn 19.9.0
[2018-11-12 09:15:48 +0100] [11782] [INFO] Listening at: http://127.0.0.1:8000 (11782)
[2018-11-12 09:15:48 +0100] [11782] [INFO] Using worker: sync
[2018-11-12 09:15:48 +0100] [11785] [INFO] Booting worker with pid: 11785
Application object must be callable.
[2018-11-12 09:15:48 +0100] [11782] [INFO] Shutting down: Master
[2018-11-12 09:15:48 +0100] [11782] [INFO] Reason: App failed to load.
看来问题是:应用程序对象必须是可调用的。
这没有任何意义,因为应用程序是 Flask,当然是可调用的。
我可以缺少什么?
谢谢
鉴于您的路径是 python_pgfutter_importer/app.py
,您在 wsgi.py
中的导入似乎已关闭:
from python_pgfutter_importer import app as application
这使application
成为一个模块对象,你需要的是一个应用程序:
from python_pgfutter_importer.app import app as application
或者,如果您将 Gunicorn 命令行中的 wsgi:application
更改为 python_pgfutter_importer.app:app
,您可能会取消 wsgi.py
。 Docs.