当我尝试使用uWSGI启动Flask时出现以下错误。 以下是我的开始:
> # cd ..
> root@localhost:# uwsgi --socket 127.0.0.1:6000 --file /path/to/folder/run.py --callable app - -processes 2
这是我的目录结构:
-/path/to/folder/run.py
-|app
-|__init__.py
-|views.py
-|templates
-|static
/path/to/folder/run.py
if __name__ == '__main__':
from app import app
#app.run(debug = True)
app.run()
/path/to/folder/app/__init__.py
import os
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.login import LoginManager
#from flaskext.babel import Babel
from config import basedir
app = Flask(__name__)
app.config.from_object('config')
#app.config.from_pyfile('babel.cfg')
db = SQLAlchemy(app)
login_manager = LoginManager()
login_manager.setup_app(app)
login_manager.login_view = 'login'
login_manager.login_message = u"Please log in to access this page."
from app import views
*** Operational MODE: preforking ***
unable to find "application" callable in file /path/to/folder/run.py
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (pid: 26972, cores: 1)
spawned uWSGI worker 2 (pid: 26973, cores: 1)
答案 0 :(得分:177)
我接受的解决方案存在问题,因为我的烧瓶应用程序位于名为app
的变量中。你可以把它放在你的wsgi中来解决这个问题:
from module_with_your_flask_app import app as application
所以问题只是uwsgi需要一个名为application
的变量。
答案 1 :(得分:37)
__main__
,因此它永远不会找到app
(因为只有当应用以名称__main__
运行时才会加载)。因此,您需要在if __name__ == "__main__":
块之外导入它。
非常简单的改变:
from app import app
if __name__ == "__main__":
app.run()
现在,您可以使用python run.py
直接运行该应用,或者以您拥有的方式通过uWSGI运行该应用。
答案 2 :(得分:0)
如果我忽略了以下 Flask应用程序
的最小工作示例的最后两行,则发生了uWSGI错误unable to load app 0 (mountpoint='') (callable not found or import error)
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello world!"
if __name__ == "__main__":
app.run()
else:
application = app
我知道这已经在评论中隐含地提到了另一个答案,但是仍然花了我一段时间才能弄清楚,所以我希望节省其他人的时间。
对于纯 Python Dash应用程序,我可以提供以下最小可行的代码片段:
import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash()
app.layout = html.Div( html.H1(children="Hello World") )
application = app.server
if __name__ == "__main__":
app.run_server(debug=True)
同样,application = app.server
是必不可少的部分。