使用send_file显示PDF

时间:2014-09-23 06:03:00

标签: ruby-on-rails x-sendfile

我正在尝试通过控制器方法显示上传的pdf文件

class DocumentsController < ApplicationController
  def show
    response.headers['X-Sendfile-Type'] = "X-Sendfile"
    send_file(@document.file.path, filename: @document.file.name, type: "application/pdf", disposition: :inline)
  end
end

这在本地工作正常,但在heroku上我得到了不明确的应用程序错误,没有进一步的堆栈跟踪

at=info method=GET path="/documents/21" host=myapp.herokuapp.com request_id=754f6d15-cb06-43a1-aa3c-308e5308b54e fwd="76.21.40.212" dyno=web.1 connect=29ms service=27ms status=500 bytes=1543

我尝试在config / environments / production.rb中设置config.action_dispatch.x_sendfile_header = "X-Sendfile",但这会导致应用程序中的所有资源都无法加载到生产环境中。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

引用Heroku's documentation(强调我的):

  

Heroku不支持使用Rack :: Sendfile。 Rack:Sendfile通常要求有一个前端网络服务器,如nginx或apache与应用服务器在同一台机器上运行。这不是Heroku的架构。

serve static files and uploads from a Heroku app,您最好的选择是使用Amazon S3等服务进行存储:

  

AWS S3或类似的存储服务在构建规模应用程序时非常重要,是Heroku短暂文件系统的完美补充。