2012-02-03 179 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點軌的過程。如果八個用戶同時請求PDF,這些過程將全部被佔用30秒,並且沒有其他人可以使用您的站點30秒。

如果你深入研究它,你會發現實際上停機時間會比30秒長,因爲Rails必須花費時間將文件發送給用戶,並且用戶可能會有一個緩慢的互聯網連接。你也許可以,如果您啓用了正確的緩衝在Web服務器或者使用類似的nginx的X-Accel-Redirect來解決這個問題。

的另一個問題是,無論網絡服務器正在運行它決定Rails已經等了太久後可能會放棄該請求。它可能不會在30秒後放棄,但也許你應該檢查你的Web服務器配置,以確保它。

你也應該請務必提供正確的HTTP頭告訴瀏覽器是什麼類型的文件,這是。我認爲Content-Type是你需要的。