我们有一个在线商店网页应用程序,由Django、PostgreSQL和Heroku驱动。
针对某项特定活动(可以将其视为要购买的产品),我们已经成功出售了10K+份副本。然而,根据我们Sentry报告的内容,一些用户遇到了错误。这些用户的常见规格是:在购买之前没有地址信息。通常,用户在注册后会立即填写地址表单。如果他们没有填写,则需要在购买产品时填写表单并一起提交。
这就是跟踪的样子:
针对某项特定活动(可以将其视为要购买的产品),我们已经成功出售了10K+份副本。然而,根据我们Sentry报告的内容,一些用户遇到了错误。这些用户的常见规格是:在购买之前没有地址信息。通常,用户在注册后会立即填写地址表单。如果他们没有填写,则需要在购买产品时填写表单并一起提交。
这就是跟踪的样子:
OperationalError: cursor "_django_curs_140398688327424_146" does not exist
(66 additional frame(s) were not displayed)
...
File "store/apps/store_main/templatetags/store_form_filters.py", line 31, in render_form
return render_to_string('widgets/store_form_renderer.html', ctx)
File "store/apps/store_main/templatetags/store_form_filters.py", line 20, in render_widget
return render_to_string('widgets/store_widget_renderer.html', ctx)
File "store/apps/store_main/widgets.py", line 40, in render
attrs=attrs) + "<span class='js-select-support select-arrow'></span><div class='js-select-support select-arrow-space'><b></b></div>"
OperationalError: cursor "_django_curs_140398688327424_146" does not exist
还有一个奇怪的共同点,就是在 SQL 查询失败之前会出现异常消息。您可以在下面的图片中看到:
如果它们以某种方式相关,我就添加它们。可能相关的另一件事是,在批量邮件之后立即尝试购买活动的用户会遇到此错误。因此,可能原因是大量流量,但我们也不确定。
由于 Heroku 托管 postgres,我们向他们询问问题,但他们也没有任何线索。
我知道这个错误的正式原因是在提交后尝试访问游标。由于事务后被销毁,尝试访问会导致此错误,但我在我们的场景中没有看到这一点。我们没有以任何方式触碰游标。我漏掉了什么?可能会导致这个错误?如何防止它?任何想法将不胜感激。