无法在uWSGI下运行Flask应用程序

时间:2016-04-07 21:12:19

标签: python flask uwsgi

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

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

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

3 个答案:

答案 0 :(得分:2)

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执行该操作。

答案 1 :(得分:-1)

你有没有试过像......

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/

答案 2 :(得分:-1)

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

来激活它
execfile(activate_this, dict(__file__=activate_this))

我认为你应该定义项目目录:

import sys

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