0

我正在尝试通过控制器方法显示上传的 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.action_dispatch.x_sendfile_header = "X-Sendfile"在 config/environments/production.rb 中进行设置,但这会导致应用程序上的所有资产都无法在生产中加载。

我错过了什么?

4

1 回答 1

2

引用Heroku 的文档(强调我的):

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

要从Heroku 应用程序提供静态文件和上传,最好的办法是使用 Amazon S3 之类的服务进行存储:

AWS S3 或类似的存储服务在构建可扩展的应用程序时非常重要,并且是 Heroku 临时文件系统的完美补充。

于 2014-09-23T06:17:03.227 回答