python - 如何在生产中调试 ajax 视图?
问题描述
我有这个视图,它只响应 AJAX 请求:
def ajax_product_details_like_prods(request, product_id):
like_prods = None
product = get_object_or_404(Product, product_id=product_id)
# Haystack
if product != None:
like_prods = SearchQuerySet().more_like_this(product)[:15]
html = render_to_string('ajax/product_details.html', {"most_visited": like_prods})
return HttpResponse(html)
此代码适用于本地开发服务器,500 error
但当我尝试在生产服务器上使用该 AJAX 访问页面时,它会在开发工具控制台中抛出。
更多细节:
1)这个视图使用Haystack+Whoosh
连接:
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
'PATH': os.path.join(BASE_DIR, 'whoosh_index')
},
}
这似乎没问题——当我跑步manage.py shell
和打印时settings.HAYSTACK_CONNECTIONS
——我看到了一条正确的道路。2)文件夹
中有所有需要的索引。whoosh_index
它们是在我的本地机器上生成的,然后上传到 prod。但我认为这可能有效,因为我测试过复制索引并且它们在本地工作。
如何检查此 AJAX 视图在哪个阶段失败?
解决方案
穷人的解决方案:在答案中返回异常
一个糟糕的解决方案是将异常作为答案返回(仅在测试阶段这样做!因为它暴露了黑客可以使用的潜在信息)。
from traceback import format_exc
def ajax_product_details_like_prods(request, product_id):
try:
like_prods = None
product = get_object_or_404(Product, product_id=product_id)
# Haystack
if product != None:
like_prods = SearchQuerySet().more_like_this(product)[:15]
html = render_to_string('ajax/product_details.html', {"most_visited": like_prods})
return HttpResponse(html)
except Exception as e:
return JsonResponse({'error': repr(e), 'traceback': format_exc()})
记录工具
对于生产中的服务器来说,这当然不是一个好的解决方案:它暴露了您可能想要隐藏的细节。此外,用户只会感到困惑。
您可以使用Sentry等日志记录工具并将应用程序添加到您的 Django 安装中。在这种情况下,如果您没有捕获到异常,它将创建一个新问题。
推荐阅读
- css - CSS无缘无故地将标题div颜色应用于以下div
- powershell - 向 Windows Credentials Vault 添加新条目
- php - Woocommerce 订阅:如果产品是订阅产品,则获取产品变体
- vba - excel vba调用带有命名参数的vbscript
- java - 除了 for each 循环中的最后一行之外的所有行都被跳过
- css - Vuetify 移动抽屉:方角?
- php - PHP PDO 绑定参数冗余
- php - 目标类 [User] 不存在。- 拉拉维尔
- android - 非消耗性 IAP 在 Android 上购买两次
- java-8 - 为什么第一次调用并行流的执行时间比下一次大得多