PDF和Ruby on Rails

时间:2012-02-03 06:37:21

标签: ruby-on-rails

当用户点击get_pdf操作时会出现什么问题? 如果有问题,怎么解决?

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

1 个答案:

答案 0 :(得分:2)

主要问题是您的服务器上通常会有有限数量的Rails进程,并且每次用户发出请求时,他都会在请求期间占用整个Rails进程。

假设您有8个rails进程。如果八个用户同时请求PDF,则这些进程将被占用30秒,其他任何人都无法使用您的网站30秒。

如果你再深入一点,你会发现实际停机时间会超过30秒,因为Rails必须花时间将文件发送给用户并且用户可能网络连接速度较慢。如果您在Web服务器中启用了正确的缓冲或使用类似nginx的X-Accel-Redirect之类的东西,您可以解决这个问题。

另一个问题是,在您决定Rails等待太久之后,您运行的任何Web服务器都可能放弃请求。它可能不会在30秒后放弃,但也许您应该检查您的Web服务器配置以确定。

您还应该确保提供正确的HTTP标头,以告诉浏览器这是什么类型的文件。我认为Content-Type就是你所需要的。