500(内部服务器错误)GET并请求从JQuery / ajax到heroku服务器的POST

时间:2017-09-01 05:21:07

标签: jquery ajax django heroku

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

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

enter image description here

这是我的localhost Django服务器

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

enter image description here

服务器抛出错误500,虽然发生了一些无聊或奇怪 以前,当我第一次在我的Heroku部署中为这个用户创建一个用户时,创建和获取帖子功能它可以正常工作。就像在我当地的环境发展中一样。

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

enter image description here

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

为什么只接受ajax请求只是一个用户和其他用户,如上面显示的图像,不能用于ajax请求?

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

关于部署我的项目,还有哪些其他选项可供我参考?

AWS EC2?可能是?

Heroku免费dyno,不要让我查看由于在这个免费的dyno中的日志,没有保存文件..

我很欣赏它的一些方向。

最好的问候

更新

我可以根据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 %}

我非常欣赏它的一些方向。

1 个答案:

答案 0 :(得分:1)

通常情况下,迁移到其他托管服务提供商时,您遇到的问题很可能无法解决。

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

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