2012-02-03 14 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

主要な問題は、一般的に、あなたのサーバー上でのRailsのプロセスの数が限られているということです、そしてすべての時間は、ユーザは、要求の期間中、全体のRailsのプロセスを占有要求を行います。

8つのレールプロセスがあるとします。同時に8人のユーザーがPDFを要求すると、プロセスはすべて30秒間占有され、誰もあなたのサイトを30秒間使用することはできません。

これを少し深く見ると、実際にはダウンタイムは30秒より少し長くなります。なぜなら、Railsはファイルをユーザーに送信する時間を費やす必要があり、ユーザーは遅いインターネット接続。ウェブサーバで適切な種類のバッファリングを有効にするか、nginxのX-Accel-Redirectのようなものを使用すると、これを回避することができます。

もう1つの問題は、実行中のWebサーバーが、Railsがあまりにも長く待っていると判断した後、リクエストを諦めてしまうことです。おそらく30秒後にはあきらめることはありませんが、Webサーバの設定を確認してください。

また、正しいHTTPヘッダーを指定して、ブラウザにそのファイルの種類を伝える必要があります。私はContent-Typeがあなたが必要と思うものだと思います。