uwsgi找不到Flask应用程序:(可调用未找到或导入错误)

rub*_*lex 2 python deployment wsgi flask uwsgi

我大致遵循Flask的这个部署指南.当我通过uwsgi启动我的应用程序时,收到错误:

***操作模式:preforking***

无法加载应用0(mountpoint ='')(未找到可调用或导入错误)

***没有加载应用.进入完全动态模式***

这是与其他SO问题相同的问题,因此它是一个python路径问题,但我仍然无法让我的应用程序运行.这是我的设置:

/home/btw/prod/
.... app.py
.... inits.py
.... templates/
.... wsgi.py
.... prod.ini
.... env/       <--- virtualenv dir
Run Code Online (Sandbox Code Playgroud)

inits.py

# This initializes everything

from flask import Flask
#... other imports

app = Flask(__name__)
app.debug = False

# Flask-Migrate
migrate = Migrate(app,db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
Run Code Online (Sandbox Code Playgroud)

app.py

# This holds the main application code and routes 

from inits import *

@app.route('/doit')
def doit():
    return render_template('doit.html')

if __name__ == '__main__':
    manager.run()
Run Code Online (Sandbox Code Playgroud)

prod.ini

[uwsgi]
module = wsgi

master = true
processes = 5

socket = prod.sock
chmod-socket = 660
vacuum = true

die-on-term = true
Run Code Online (Sandbox Code Playgroud)

prod.conf(用于启动烧瓶应用程序):

description "uWSGI server instance configured to serve prod"

start on runlevel [2345]
stop on runlevel [!2345]

setuid btw
setgid www-data

env PATH=/home/btw/prod/env/bin
chdir /home/btw/prod
exec uwsgi --ini prod.ini
Run Code Online (Sandbox Code Playgroud)

wsgi.py

from app import manager

if __name__ == '__main__':
    manager.run()
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

from prod import app

if __name__ == '__main__':
    manager.run()
Run Code Online (Sandbox Code Playgroud)

但这抱怨了ImportError: No module named prod.

有人可以帮我解决为什么uwsgi找不到我的申请?

编辑:

我想我发现了问题,但我不知道解决方案是什么.调用manager.run()导致找不到应用程序,但如果我只是使用app.run()绕过Flask的管理器,uwsgi会成功找到应用程序.

这是为什么?

rub*_*lex 6

好吧,经过几个小时探索这个烂摊子后,我想出来了!

运行uwsgi时,app必须与其他内部模块冲突.我已经将初始化改为application = Flask(__name__)from app import application.现在我的应用程序正确加载.