2

在我的烧瓶 Web 应用程序中,我使用烧杯库进行会话处理。在下面的代码中,由于某种未知原因,生产服务器引发异常,但我的本地 PC 运行良好。

import sys

...

try:
    beaker_session = request.environ['beaker.session']
    beaker_session['user_id'] = user.id 
    beaker_session.save()
except:
    flash(sys.exc_info()[0])
    return render_template('main/login.html')

本地计算机按预期保存会话,没有任何异常。生产服务器 (RedHat OpenShift) 恰好在“beaker_session.save()”行引发错误。但是,引发了内部服务器错误 500,而不是显示带有 Flash 消息的登录页面。我检查了烧杯后端 url (mysql db) 并且没有问题,因为它适用于代码的其他部分,我在其中保留了新注册的用户。所以,我的问题是 1)为什么除了部分不起作用?2)为什么烧杯不能保存会话。谢谢你。

4

2 回答 2

0

默认情况下,Flask 会吞下异常,请务必将此行添加到您的应用程序顶部附近:

app.config['PROPAGATE_EXCEPTIONS'] = True

于 2013-01-07T16:46:08.267 回答
0

我不熟悉烧杯库,但如果它是一个 SWIG 包装的库,并且 C++ 代码中出现异常,则设计人员可能忽略了将异常映射到适当的 python 异常。如果是这种情况,那么 Python 就不会处理异常——甚至 try/except 也会错过它。

于 2012-03-31T16:45:47.410 回答