在 uWSGI 下遇到问题 运行 Flask 应用程序

Having trouble running Flask app under uWSGI

我正在尝试 运行 我的 Flask 应用程序在 uWSGI 下并且得到:

unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***

布局为:

/opt/myapp
/opt/myapp/wsgi.py
/opt/myapp/run.py
/opt/myapp/lib
/opt/myapp/app
/opt/myapp/app/blueprints.py
/opt/myapp/app/filters
/opt/myapp/app/filters/__init__.py
/opt/myapp/app/__init__.py
/opt/myapp/app/main.py

app/__init__.py包含通常的:

from flask import Flask
app = Flask(__name__)

app/main.py 看起来像:

import blueprints
import filters

from app import app

def run(debug, host='0.0.0.0'):
    app.run(debug=debug, host=host)

wsgi.py 看起来像:

if __name__ == '__main__':
    from app.main import app as application
    application.run(host='0.0.0.0')

如果我从 CLI 运行 python wsgi.py,它工作正常,通常的 :5000 服务器。

如果我运行:

uwsgi --socket 0.0.0.0:8080 --protocol=http -w wsgi

我看到错误,无法加载应用程序。

你试过类似...

uwsgi -s 0.0.0.0:8080 --protocol=http --module myapp --callable app

我不是 100% 确定 --module 和 --callable 选项是否正确,因为我没有你的实际代码,可能类似于 --module myapp.app --callable main 或其他变体

来自关于一起使用 uwsgi 的文档。

http://flask.pocoo.org/docs/0.10/deploying/uwsgi/

如果它在 virtualenv 中你必须通过添加激活它:

execfile(activate_this, dict(__file__=activate_this))

而且我认为您应该定义项目目录:

import sys

sys.path.append('/opt/myapp/app')

uWSGI 导入 你的wsgi.py。所以这段代码永远不会执行:

if __name__ == '__main__':
    from app.main import app as application
    application.run(host='0.0.0.0')

您应该在模块级别创建应用程序:

from app.main import app as application

if __name__ == "__main__":
    application.run(...)

你当然必须将 .run() 方法留在主块中,因为你不希望 uWSGI 执行它。