2012-02-03 8 views
1

사용자가 get_pdf 작업을 수행 할 때 어떤 문제가 발생할 수 있습니까? 문제가있는 경우 어떻게 해결할 수 있습니까?PDF와 Ruby on Rails

class PdfController < ApplicationController 
    def get_pdf 
    send_data Pdf.create(params[:contents]) 
    end 
end 

class Pdf 
    def self.create(contents) 
    make_pdf(contents) # takes 30 seconds to run 
    end 
end 

답변

2

주요 문제는 일반적으로 당신이 레일의 제한된 수의 서버에서 처리해야한다는 것입니다, 모든 시간은 사용자가 자신이 요청의 기간 동안 전체 레일 프로세스를 차지하는 요청합니다.

8 개의 레일 프로세스가 있다고 가정 해 봅니다. 8 명의 사용자가 동시에 PDF를 요청하면 프로세스는 모두 30 초 동안 사용되지 않으며 다른 사용자는 30 초 동안 사이트를 사용할 수 없습니다.

좀 더 자세히 살펴보면 레일스가 파일을 사용자에게 보내는 데 시간을 소비해야하고 사용자가 느린 인터넷을 사용할 수 있으므로 실제로 다운 타임은 30 초보다 약간 길다는 것을 알게 될 것입니다 연결. 웹 서버에서 올바른 종류의 버퍼링을 사용하거나 nginx의 X-Accel-Redirect과 같은 것을 사용하면이 문제를 해결할 수 있습니다.

또 다른 문제는 Rails가 너무 오래 기다린다고 결정한 후 실행중인 웹 서버가 요청을 포기할 수 있다는 것입니다. 아마 30 초가 지나면 포기하지 않을 것이지만 어쩌면 웹 서버 구성을 확인해야합니다.

올바른 HTTP 헤더를 제공해야 브라우저에 어떤 파일인지 알릴 수 있습니다. 제 생각에는 Content-Type이 필요합니다.