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会成功找到应用程序.
这是为什么?
好吧,经过几个小时探索这个烂摊子后,我想出来了!
运行uwsgi时,app
必须与其他内部模块冲突.我已经将初始化改为application = Flask(__name__)
了from app import application
.现在我的应用程序正确加载.