我有这个视图,只响应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)
此代码适用于本地开发服务器,但当我尝试在生产服务器上使用该AJAX访问页面时,它会在dev-tools控制台中抛出500 error
。
更多详情:
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视图失败的阶段?
答案 0 :(得分:1)
穷人解决方案是将异常作为答案返回(仅在测试阶段执行此操作!因为它暴露了黑客可能使用的潜在信息)。 / p>
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安装中。在这种情况下,如果存在未被您捕获的异常,它将创建一个新问题。