我正在尝试在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
我看到错误,无法加载应用程序。
答案 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的文档中。
答案 2 :(得分:-1)
如果它在virtualenv中你必须通过添加:
来激活它execfile(activate_this, dict(__file__=activate_this))
我认为你应该定义项目目录:
import sys
sys.path.append('/opt/myapp/app')