2017-12-01 8 views
0

요청을 죽이고 :SEND_DATA이 큰 파일을 보낼 수 없습니다 - 30 초 후에, 나는이 코드 라인 유니콘의 nginx에 레일 응용 프로그램을 /이

format.csv { send_data Test_Model.to_csv, stream: 'true', filename: "assets-#{DateTime.now.strftime('%Y%m%d%H%M%S')}.csv" } 

문제는 -에 의해 생성 된 파일을 내 to_csv 메서드는 큰 측면에, 2.4 MB - 내 응용 프로그램에 대한 SQL 쿼리을 통해 그것을 생산하는 데 오랜 시간이 걸립니다 ... 그리고 그 longness 내가 변경할 수있는 뭔가가 아닙니다.

what I always get

어쩌면 1 회 10, 내가 나올 파일을받을 수 있나요 :

그래서 다음 시간의 90 %는 내가 얻을 내 기능을 호출합니다. 그러나 요점은 ... 이것을 생성하고 send_data를 통해 전송하는 것은 엄청난 용도가 될 것입니다.

send_file에 대한 이야기가 있습니다. 그러나 send_file은 이미 생성 된 파일의 파일 경로를 필요로합니다. 이 경우 send_data를 사용하여이 데이터를 동적으로 만들고 싶습니다. 가능하다면 send_data에서이 파일을 푸시하고 싶습니다. 심지어 파일을 생성하는 데 30 초 이상 걸린다고해도 가능합니다.

UPDATE는

그래서 내 응용 프로그램의 종류 "시간 초과"및 30 초에서 먼지를 문다. 어딘가 타임 아웃 설정과 같이 끔찍한 소리가납니다. 나는 궁금하다 - send_data 타임 아웃이 유니콘 conf 또는 일반 레일 conf에 설정 되었는가? send_data과 관련된 제한 시간을 어떻게 조정할 수 있습니까?

+0

더 큰 파일을 보내는 데는 아무런 문제가 없습니다 (2.4 MB는 그리 크지 않습니다). 어떤 서버를 사용합니까? 'curl -I http : // yourpath'로 테스트하고 출력을 게시 할 수 있습니까? 일반 네트워크 브라우저의 오류로 인해 문제가 숨길 수 있습니다. – 23tux

+0

csv 데이터를 생성하는데 얼마나 걸립니까? – 23tux

+0

@ 23tux 생성하는 데 몇 초가 걸립니다. 대략 15-30 초. – PinkElephantsOnParade

답변

2

Ngnix는 너무 오래 걸리는 연결을 종료합니다. 긴 연결은 응용 프로그램이 잠재적으로 다른 요청을 처리 할 수 ​​없음을 의미합니다. ActiveJob 또는 다른 백그라운드 생성을 사용하라는 요청을 다시 작성하는 것 외에도 nginx 확인 매개 변수 keepalive_timeout을 확인할 수 있습니다.

+0

예.이 방법을 바꿀 수 있습니다. 우리는보고 서버 중 일부를 60 초 또는 90 초로 설정했습니다.또한 이것은 브라우저 우려 일 수 있습니다. 일반적으로 대용량 파일이나 처리하는 데 시간이 걸리는 파일의 경우 정확한 이유로 AJAX 요청을합니다. – engineersmnky

+0

Hey @ John Naegle nginx.conf의 keepalive_timeout 설정을 기본값 인 5 번과 반대로 90 초로 변경했습니다. 그러나 요청 시간이 30 초로 단축되었습니다. 이제 관련 유니콘 설정을 찾으려고합니다.이 타임 아웃이 nginx라는 이름의 설정에서 따로 따로 관리되고있는 것은 이상한 일입니다. – PinkElephantsOnParade

+0

랙 타임 아웃을 사용하고 있습니까? https://github.com/heroku/rack-timeout –

0

유니콘 timeout parameter

는 초 + +에 작업자 프로세스의 타임 아웃을 설정 갖는다. 을 처리하는 근로자는이 시간보다 오래 걸리는 요청/app.call/응답주기를 기간 (SIGKILL을 통해)으로 강제 종료합니다. 이 제한 시간은 이며 마스터 프로세스 자체에서 적용되며 작업자 프로세스의 일정 제한은 입니다. 복잡성이 낮은 낮은 오버 헤드 구현으로 인해 3.0 초 미만의 시간 초과는 부정확하고 안전하지 않은 것으로 간주 될 수 있습니다.