我正在尝试通过控制器方法显示上传的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"
,但这会导致应用程序中的所有资源都无法加载到生产环境中。
我错过了什么?
答案 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短暂文件系统的完美补充。