我正在使用Flask编写一个小型网站,数据库是mysql,并使用flask-sqlalchemy来处理它。但我被一个奇怪的502错误所困扰,我确实通过谷歌进行了很多搜索并调试了很长时间但仍然失败了。希望你们能帮忙。
在调试模式下,一切正常,但设置app.debug = False
时,将返回502错误。
我已经调试了很长时间了,其中一个有用的发现是运行db.session.commit()
时出现502错误。
我不确定这些问题是否与jsonify
。
部分代码:
@app.route('/sell/update', methods=('GET', 'POST'))
@login_required
def sell_update():
"""docstring for sell_update"""
res = {}
# It should be call with post method
id = int(request.form.get('id', 0))
status = int(request.form.get('status', 0))
sell = lib.get_sell_by_id(id)
if sell.user.id != g.user.id:
res['error'] = MSG_SELL_PERMISSION_INVALID
if not id or not sell:
res['error'] = MSG_SELL_ID_INVALID
res['status'] = res.get('error') and 'ERROR' or 'OK'
sell.status = status
# return 'TEST' # this line works fine in both debug and production
db.session.commit() # Error occurs right here
return jsonify(**res)
欢迎任何想法和建议。提前谢谢。
答案 0 :(得分:1)
最后,我巧合地解决了这个问题。
问题在于我还使用flask-whooshalchemy
进行搜索功能,并且需要在索引文件上进行写操作。
运行调试模式时,索引文件是使用当前用户的所有权创建的,但在部署生产模式时,用户为www-data
(在Ubuntu中使用nginx),因此无权写入。
发现此问题的关键是使用try except并返回异常消息作为视图的返回。如果没有这个,我们就无法在生产部署中看到任何引用或类似内容。