2017-09-01 30 views
1

我有我的Django应用程序部署在Heroku免费dyno 目前,我从JQuery-1.12.4版本发送一些GET和POST请求500(内部服务器错误)GET和请求POST从JQuery/ajax到heroku服务器

在我的申请,我的本地开发版本,请求我的REST端点服务它的作品 这里的获取一个用户的帖子的例子,从阿贾克斯消耗到终点休息服务

enter image description here

这是我的本地主机Django服务器

我部署在Heroku免费测功机这个相同的用户界面,但行为如下:

enter image description here

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

的Heroku接受JQuery的AJAX GET和POST请求,只对这个用户,如按照这样的画面:

enter image description here

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

为什么只接受只有用户和其他用户喜欢的图像显示在上面的ajax请求,不起作用的Ajax请求?

this question谈论的话题,但我并没有明确这个问题

其他选项建议我关于我的项目的部署是什么?

AWS EC2?也许?

Heroku的免费测功机,不要让我的日志看,由于在这个免费的测功机,不保存文件..

我很欣赏一些关于它的方向。

问候

UPDATE

我可以看看我的Heroku的部署日志,根据to this answer

通过的那一刻,在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的我的视图的代码。在这里,我创造了AJAX GET请求被发送到检索用户帖子

在这个视图端点/api/post/我管理两个scenaries:

一个。我收到用户查看帖子的请求 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

我建议在您的应用程序中设置更好的日志记录,以便您可以看到500错误的完整回溯。您可以设置电子邮件日志记录以通过电子邮件将任何错[见本页](https://docs.djangoproject.com/en/1.11/topics/logging/#configuring-logging) – rawbeans

+1

相反,您可以使用[Sentry](https://sentry.io/) 。它对于单个用户是免费的,并且非常容易设置。它会向你发送错误邮件,并有一个非常漂亮的界面用于导航回溯。 – rawbeans

+1

但是对于这个问题,你可以做的最简单和最快的事情是在你的设置中为heroku django服务器设置DEBUG = True,这样你就可以在你的浏览器窗口中获得回溯。现在通过浏览器而不是AJAX发出请求,并且你应该得到500错误的回溯。完成此操作后更新您的问题。 – rawbeans

回答

1

大多数情况下,您遇到的问题将无法通过迁移到其他托管服务提供商来解决。

你应该做的是找到一种方法来查看你的API网址的错误的完整追溯。您可以通过以下几种方式之一进行:在发生错误时

  • 安装第三方日志服务

    • 安装Django的日志记录,以接收追踪电邮,例如Sentry
    • (最简单的)直接访问API网址中而不是通过AJAX调用。您还需要在设置中设置DEBUG=True以查看浏览器中的回溯
  • +0

    你是否建议我在该Sentry之前包含日志记录Django功能?虽然......一起不排除真的吗? – bgarcial

    相关问题