Zauważyłem ostatnio, że send_file w Rails3 nie działa tak jak trzeba na serwerze Apache. Problem był taki, że Railsy które miały serwować plik 5MB, serwowały pusty plik.

Działo się tak tylko w środowisku produkcyjnym, więc dość ciężko było znaleźć przyczynę. Na co dzień developerkę robię na Mongrelu, pod którym wszystko działało normalnie.

Na szczęście rozwiązanie tego problemu okazało się bardzo proste. Nie na każdym serwerze można wysyłać pliki, oddelegowując je przez X-Sendfile. Wygląda na to że Rails “puszczał” nagłówek w stronę serwera, a ten po prostu go przekazywał.

Aby rozwiązać ten problem, wystarczy w pliku config/production.rb odznaczyć (zakomentować) następującą linijkę:

config.action_dispatch.x_sendfile_header = "X-Sendfile"

Po zakomentowaniu tego, Railsy będą wysyłały pliki w standardowy sposób.