【问题标题】:500 (Internal Server Error) GET and request POST from JQuery/ajax to heroku server500(内部服务器错误)从 JQuery/ajax 到 heroku 服务器的 GET 和请求 POST
【发布时间】:2018-02-10 03:13:05
【问题描述】:

我将我的 Django 应用程序部署在 Heroku 上的免费测功机中 目前,我正在从 JQuery-1.12.4 版本发送一些 GET 和 POST 请求

在我的应用程序的本地开发版本中,对我的 REST 端点服务的请求是有效的 这是获取用户帖子的示例,从 ajax 消费到端点休息服务

这是我的本地 Django 服务器

我在 Heroku free dyno 上部署了相同的用户界面,但行为如下:

服务器抛出错误 500,虽然发生了一些不寻常或奇怪的情况 以前,当我在 Heroku 部署中首次为该用户创建用户时,创建和获取帖子功能正常工作。就像在我的本地环境开发中一样。

Heroku 只接受来自 JQuery AJAX 的 GET 和 POST 请求给这个用户,如下图所示:

我不知道 Heroku 喜欢生产/测试服务器部署不接受或接受有限 AJAX 请求的原因。有可能(我认为是这样,而且太合乎逻辑了)这种行为是由于我使用的是免费的 dyno heroku 服务器吗?

为什么只接受一个用户和其他用户的 ajax 请求,如上图所示,ajax 请求不起作用?

this question谈话题,但我没有明确这个话题

对于我的项目部署,还有哪些其他选项建议我?

AWS EC2?可能吗?

Heroku 免费测功机,不要让我看日志,因为在这个免费测功机中,不保存文件..

我很欣赏有关它的一些指导。

最好的问候

更新

根据to this answer,我可以查看我的heroku部署中的日志

目前,GET 和 POST 操作中的日志只告诉我status 500

这是我执行 GET 请求时的日志

2017-09-01T12:34:31.053127+00:00 heroku[router]: at=info method=GET path="/api/post/?q=" host=hostayni.herokuapp.com request_id=acd319f7-d47d-4e6c-833f-a0ef34163c51 fwd="190.240.77.93" dyno=web.1 connect=1ms service=615ms status=500 bytes=253 protocol=http

这是我执行 POST 请求时的日志

2017-09-01T12:37:56.512868+00:00 heroku[router]: at=info method=POST path="/api/post/create/" host=hostayni.herokuapp.com request_id=6d51cd89-431e-4b6e-80fe-55a505433fcc fwd="190.240.77.93" dyno=web.1 connect=1ms service=150ms status=500 bytes=253 protocol=http

此时我不知道如何从我的 JQuery ajax 请求中处理与 status=500 相关的问题

这是继承 ListAPIView 的我的视图代码。在这里,我正在创建一个端点 /api/post/,其中发送 ajax GET 请求以检索用户帖子

在这个视图中,我管理两个场景:

a. 我收到用户查看他们帖子的请求 b.我请求我关注的用户列表并检索他们的帖子

class PostListAPIView(generics.ListAPIView):
    serializer_class = PostModelSerializer
    pagination_class = StandardResultsPagination

    def get_queryset(self, *args, **kwargs):

        # Capturamos el request de un usuario
        requested_user = self.kwargs.get("email")
        if requested_user:

            # Para ver los posts mios y los que reposteo
            qs = Post.objects.filter(user__email=requested_user).order_by('-timestamp')
            query = self.request.GET.get("q", None)
            if query is not None:
                # Para buscar por usuario y por su contenido
                qs = qs.filter(
                    Q(content__icontains=query) |
                    Q(user__email__icontains=query)
                )
            return qs
        else:
            im_following = self.request.user.profile.get_following() 
            # Mostrando los posts de los usuarios que sigo
            # Bind querysets 
            # Para ver los posts de los que sigo y los mios
            qs1 = Post.objects.filter(user__in=im_following)
            qs2 = Post.objects.filter(user = self.request.user)
            qs = (qs1 | qs2).distinct().order_by('-timestamp')
            # print(self.request.GET)
            query = self.request.GET.get("q", None)
            if query is not None:
                qs = qs.filter(
                    Q(content__icontains=query) |
                    Q(user__email__icontains=query)
                )
            return qs

从我的 html 模板中,我以这种方式执行 ajax GET 请求:

{% extends "layout.html" %}
{% block script %}
    // Codigo basico para traernos datos de REST
    <script>
    $(document).ready(function(){
        console.log("working");
        $.ajax({
            url: "/api/post/", 
            method: "GET",
            success: function (data) {
                console.log("the data are")
                console.log(data)

            },
            error: function(data){
                console.log("error")
                console.log(data)
            }
        })
    });
    </script>
{% endblock script %}

我非常感谢有关它的一些指导。

【问题讨论】:

  • 我建议在您的应用程序中设置更好的日志记录,以便您可以看到 500 错误的完整回溯。您可以设置电子邮件日志记录以通过电子邮件将任何错误发送给您。 See this page
  • 相反,您可以使用Sentry 之类的服务。它对单个用户免费,并且非常易于设置。它会向您发送错误电子邮件,并有一个非常流畅的界面用于导航回溯。
  • 但是对于这个问题,您可以做的最简单和最快的事情是在您的 heroku django 服务器设置中设置 DEBUG = True,这样您就可以在浏览器窗口中获得回溯。现在通过浏览器而不是 AJAX 发出请求,您应该得到 500 错误的回溯。完成此操作后更新您的问题。
  • 目前您正在通过 ajax 调用 url。要直接通过浏览器访问该网址,请在浏览器栏中输入网址(hostayni.herokuapp.com/api/post?q= 而不是hostayni.herokuapp.com/post/)。
  • @rawbeans 我已经序列化了一个字段,默认情况下它不能被 Django Rest Framework 序列化。然后,浏览器显示这个错误:TypeError at /api/post/ Country(code='') is not JSON serializable.

标签: jquery ajax django heroku


【解决方案1】:

您遇到的问题很可能无法通过转移到其他托管服务提供商来解决。

您应该做的是找到一种方法来查看您在 API 网址中遇到的错误的完整回溯。您可以通过以下几种方式之一执行此操作:

  • 设置 django 日志记录以在发生错误时接收回溯电子邮件
  • 设置第 3 方日志记录服务,例如 Sentry
  • (最简单)直接在浏览器中访问 API url,而不是通过 AJAX 调用。您还需要在设置中设置DEBUG=True 才能在浏览器中查看回溯

【讨论】:

  • 你建议我在 Sentry 之前包含记录 Django 功能吗?虽然……在一起不排除真的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 2014-09-24
相关资源
最近更新 更多