0

I'm attempting to display uploaded pdf files via a controller method

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

This works fine locally, but on heroku I get the inexplicit application error with no further stack trace

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

I've tried setting config.action_dispatch.x_sendfile_header = "X-Sendfile" in config/environments/production.rb but this causes all the assets on the application to not be loaded in production.

What am I missing?

Daniel Nill
  • 5,539
  • 10
  • 45
  • 63

1 Answers1

2

Quoting Heroku's documentation (emphasis mine):

Heroku does not support the use of Rack::Sendfile. Rack:Sendfile usually requires that there is a frontend webserver like nginx or apache is running on the same machine as the application server. This is not how Heroku is architected.

To serve static files and uploads from a Heroku app, your best bet is to use a service like Amazon S3 for storage:

AWS S3, or similar storage services, are important when architecting applications for scale and are a perfect complement to Heroku’s ephemeral filesystem.

awendt
  • 13,195
  • 5
  • 48
  • 66