2017-11-16 5 views
0

레일 애플리케이션을 개발 중입니다. 뷰에서프로덕션에서는 타임 아웃이되지만 로컬 레일에서는 그렇지 않습니다.

, 나는 행동이 remote: true

<%= form_tag({controller: "my_controller", action: "my_method"}, {remote: true}) do %> 
모든 일이 잘 작동

를 사용하여 AJAX의 컨트롤러로 전송됩니다 양식을 만들었지 만, 컨트롤러 (드 결과를 계산하기 위해 때로는 더 시간이 걸릴 수 있습니다 100 초 이상).

내가 직면하고 문제는 현지 환경에서 잘 작동하지만 프로덕션 환경에서, 내가 ERROR 504 GATEWAY_TIMEOUT

는 생산에서 작동 할 수있는 방법이 있나요 무엇입니까이다?

+0

당신은 아마 sidekiq 또는 delayed_job 같은 것을 사용하여 백그라운드 작업 뒤에 그 기능을 넣어해야합니다 여기에 그에서 시작하는 문서입니다. 그것이 그들의 모든 목적입니다. – Vlad

+0

프로덕션 환경에서 서버 스택이란 무엇입니까? – AntonTkachov

+0

푸마 + Nginx + PostgreSQL –

답변

0

이것은 레일 서버 앞에있는로드 밸런서 (아마도 apache 또는 nginx)가 너무 오래 걸리기 때문에 응답 시간이 초과 되었기 때문일 수 있습니다! 나는 가장 친숙한 승/Nginx 그래서 거기에 수정을 통해 당신을 걸어. 당신이 nginx.conf에서 십분 (6백초)로 응답 시간 제한을 설정하면


:

proxy_connect_timeout  600; 
proxy_send_timeout   600; 
proxy_read_timeout   600; 
send_timeout    600; 

그런 service nginx reload로 nginx를 다시 시작하면 더 이상 504s를 참조해서는 안 :

0

당신의 생산 Heroku입니까? 이것을 배경 작업으로 가져와야합니다. 엄지 손가락의 규칙 (최소한 Heroku에서)은 일 수 있고은 2 초 이상 실행될 수 있습니다. 배경 작업이 필요합니다.

쉽게 할 수있는 방법은 delayed_job입니다.

Active job basics