在使用flask / jsonify / flask-sqlalchemy的生产模式中出现奇怪的502错误

时间:2014-03-21 08:01:20

标签: python flask flask-sqlalchemy

我正在使用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)

欢迎任何想法和建议。提前谢谢。

1 个答案:

答案 0 :(得分:1)

最后,我巧合地解决了这个问题。

问题在于我还使用flask-whooshalchemy进行搜索功能,并且需要在索引文件上进行写操作。

运行调试模式时,索引文件是使用当前用户的所有权创建的,但在部署生产模式时,用户为www-data(在Ubuntu中使用nginx),因此无权写入。

发现此问题的关键是使用try except并返回异常消息作为视图的返回。如果没有这个,我们就无法在生产部署中看到任何引用或类似内容。