2010-05-19 9 views
26

Django 1.2 개발 서버를 실행 중이며 Chrome 또는 Safari에서 페이지를로드 할 때마다 이러한 깨진 파이프 오류 메시지가 표시됩니다. 내 동료는 dev에 서버에서 페이지를로드 할 때 오류도 발생합니다. Opera 또는 Firefox를 사용할 때 이러한 오류가 발생하지 않습니다.Django + WebKit = 깨진 파이프

Traceback (most recent call last): 
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 281, in run self.finish_response() 
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 321, in finish_response self.write(data) 
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 417, in write self._write(data) 
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 300, in write self.flush() 
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 286, in flush self._sock.sendall(buffer) 
error: [Errno 32] Broken pipe 

나를 도와 줄 수있는 사람이 있습니까? 나는 이것에 미쳤어!

+0

얼마나 오래 실행 요청보기 걸릴 않습니다 당신은 시작과 같은 이벤트 핸들러의 끝에서 preventDefaultreturn false를 추가해야? –

+0

첫 번째 시간은 빠르지 만 깨진 파이프 오류가 발생하면 다음 페이지로드가 완료 될 때까지 ~ 10-15 초가 걸립니다. S – jmagnusson

답변

22

이것은 장고 문제가 아닙니다. 귀하의 브라우저는 대부분 잘못된 것을하고 있습니다.

이 dev에 서버가 여전히 바쁜 데이터를 보내는 동안 브라우저가 연결을 종료 할 때마다 를 발생하는 일반적인 오류입니다.

자세한 내용은 this Django ticket을 확인하십시오.

+0

장고 개발 서버 (1.3 사전 알파)를 사용하는 동안이 문제가 발생했습니다. 이 답변은 Django가 잘못되지 않았다는 점에서 정확합니다 (브라우저는 Chrome/Safari 임). 내 아약스 요청을 GET 대신 POST로 보내 문제를 해결할 수있었습니다. 어떤 이유로 GET을 통해 ajax 요청이 이루어진다면 두 브라우저 모두 응답을 기다리지 않았습니다. – awesomo

+0

맞음! @loretoparisi의 대답은 그 행동을 일으킬 수있는 아이디어를 제공합니다. –

2

나는 아마도 관련 문제가있었습니다.

Windows에서 Safari와 Chrome을 사용하는 중에 내 로컬 머신의 django runserver에서 보기가 임의로 ajax POST 요청에 대한 응답을 반환하지 않았습니다.

내가 POST를 통해 뷰에 전달 된 데이터는 하나의 키/발 쌍이었다 :

용액

이이었다 "조치 = 제거". 자, 저는 실제로이 데이터를 제 견해로 사용하지 않았습니다. 내보기에서 var에 데이터를 할당하면 (즉, foo = request.POST [ 'action']), 뷰는 매번 ajax 요청에 대한 응답을 반환합니다.

절대적으로 미친!

13

저는 최근에 django v1.1.1 개발 서버와 Chrome 7.0.517.44를 사용하여이 문제에 직면했습니다.

초기로드 후 페이지에서 항상 하드 새로 고침 (Shift 키를 누른 상태에서 다시로드 버튼 클릭)을하면 Chrome이 요청한 모든 리소스에 대한 캐시를 무시합니다. 새로 고침.

이와 같이, 이것은 내가 할 수있는 모든 것을 캐시하는 악명 높은 경향이있는 것으로 생각됩니다. 심지어해서는 안된다. 내 생각 엔 크롬이 리소스 요청을 한 다음 리소스가 캐시 된 것을 알게되면 즉시 해당 리소스에 대한 연결을 끊는 것입니다.

AJAX 요청이 여전히 문제를 일으킬 것이라는 점을 제외하면 이것은 거의 견딜 수있는 해결 방법입니다.

3

브라우저가 서버와의 연결을 끊으면 끊어진 파이프가 발생합니다. 클릭 처리기 함수에 e.preventDefault()을 추가하는 것을 잊었 기 때문에이 문제는 전에 <a href="...과 연결된 아약스 게시물 요청에서 나에게 발생했습니다. 그래서 브라우저는 게시 요청을 보내고 연결을 닫고 다른 get 요청을 보냅니다. 따라서 게시 요청이 브라우저에 의해 취소 된 것처럼 보입니다.

7

이것은 ajax 호출을 디스패치하는 javascript 함수의 오류 때문일 수 있습니다.

는 예를 들어, 함수는 링크에 클릭 이벤트에 의해 트리거 될 수 있으며, 링크의 기본 동작이 방지되어 있지 않은 경우, 당신은 바로 두 번째 요청을 얻을 것이다 브라우저를 기다리지 않고 이전 연결을 닫습니다 응답이 끝납니다. return false을 이벤트 처리기에 추가하는 것을 잊었을 때 같은 문제가 발생했습니다.

ajax를 트리거하는 이벤트 핸들러가 예외를 throw하는 경우에도 동일한 증상이 발생할 수 있습니다.

ajax 요청을 작성하는 함수와 해당 함수의 반환 값을 신중하게 디버깅하십시오.

+1

감사합니다. 방금 jquery ajax에서 "return False"가 필요하다는 것을 알았습니다. 그것만이 POST를 위해 필요했고 그 때문에 저를이 시간에 버렸습니다 ... – InfinteScroll

0

클라이언트가 JavaScript 인 경우 다음과 같은 해결책이있을 수 있습니다.

$('#btn_analyze').click(function(e) { 
    e.preventDefault() 
    $.post('/api/v1/analyzer/', 
     data, 
     "json").done(function(response) { 
     //... 
    }).fail(function() { 
     Logger.error(" Error ") 
    }) 

    return false 
}) // analyze click 
+0

야,이게 자바 스크립트가 아니야 ... – jmagnusson

+0

@jmagnusson 맞아, 자바 스크립트 클라이언트에서 같은 문제가 생겼어. 대답은 다음과 같습니다! – loretoparisi

+0

감사합니다! 바로 Chrome에서 문제를 일으키는 요소입니다. 파이어 폭스는 그것을 잘 이해할 것이다. Upvote! –