2017-09-01 85 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