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

Tam*_*mpa 62 python flask uwsgi

当我尝试使用uWSGI启动Flask时出现以下错误.我是这样开始的:

>  # cd ..
>     root@localhost:# uwsgi --socket 127.0.0.1:6000 --file /path/to/folder/run.py --callable app -  -processes 2
Run Code Online (Sandbox Code Playgroud)

这是我的目录结构:

-/path/to/folder/run.py
      -|app
          -|__init__.py
          -|views.py
          -|templates
          -|static
Run Code Online (Sandbox Code Playgroud)

的内容 /path/to/folder/run.py

if __name__ == '__main__':
   from app import app
   #app.run(debug = True)
   app.run()
Run Code Online (Sandbox Code Playgroud)

的内容 /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)
Run Code Online (Sandbox Code Playgroud)

Mil*_*ric 190

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

from module_with_your_flask_app import app as application
Run Code Online (Sandbox Code Playgroud)

所以问题只是uwsgi期望一个名为的变量application.

  • 这应该在文档中以粗体字母,100磅字体发布! (39认同)
  • 你也可以在`ini`文件中使用`callable = app`或者如果你直接调用`uwsgi`那么使用`--callable app`标志 (22认同)

Jef*_*ner 39

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

真的很简单:

from app import app

if __name__ == "__main__":
    app.run()
Run Code Online (Sandbox Code Playgroud)

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

  • 这还不够,uwsgi期望应用程序不是app,因此:else:application = app (4认同)