在 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 的文档。
如果它在 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 执行它。
我正在尝试 运行 我的 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 的文档。
如果它在 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 执行它。