如何在生产中调试ajax视图?

时间:2018-05-16 11:15:46

标签: python ajax django debugging deployment

我有这个视图,只响应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视图失败的阶段?

1 个答案:

答案 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安装中。在这种情况下,如果存在未被您捕获的异常,它将创建一个新问题。