X-Accel-Redirect never set in rails 4 app when calling send_file

712 views Asked by At

I'm working with a rails 4 app served with Puma and Nginx. In trying to directly serve certain files I've set

config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" 

in config/environments/production.rb, and I can confirm the setting is there. But when I call send_file like this:

send_file(asset.asset.path(style), disposition: 'inline', type: asset.asset_content_type)

and check for the presence of the X-Accel-Redirect header, either by logging "response.headers.inspect" or examining the headers Puma is sending to Nginx by logging the socket traffic, it's never there.

Any ideas why X-Accel-Redirect header never gets set?

1

There are 1 answers

0
Craig On BEST ANSWER

apparently the way it works is that nginx must first send an X-Accel-Mapping header to the app and then it responds with an X-Accel-Redirect header and the value you give send_file.

So in my nginx config I put something like:

location @ruby{
  ...
  proxy_set_header X-Accel-Mapping /app/current/private/=/private_files/;
}

location /private_files/ {
  internal;
  alias /app/current/private/;
}

and then the app started creating the X-Accel-Redirect header