繁体   English   中英

Flask 和 uWSGI - 无法加载应用程序 0 (mountpoint='')(找不到可调用或导入错误)

[英]Flask and uWSGI - unable to load app 0 (mountpoint='') (callable not found or import error)

当我尝试使用 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)

我对接受的解决方案有问题,因为我的烧瓶应用程序位于一个名为app的变量中。 你可以通过把这个放在你的 wsgi 中来解决这个问题:

from module_with_your_flask_app import app as application

所以问题很简单,uwsgi 需要一个名为application的变量。

uWSGI 不会将您的应用程序加载为__main__ ,因此它永远不会找到该app (因为只有在应用程序以名称__main__运行时才会加载)。 因此,您需要在if __name__ == "__main__":块之外导入它。

真正简单的改变:

from app import app as application  # for example, should be app

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

现在,您可以直接使用python run.py运行该应用程序,或者以您拥有的方式通过 uWSGI 运行它。

注意:如果您设置了--callable myapp ,则需要将其从as application更改为myapp (默认情况下uwsgi需要application

如果我省略了以下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是这里的基本部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM