Я считаю, что send_file зависит от поддержки вашего веб-сервера для работы. Вы запускаете свое приложение, используя рельсы, встроенные в сервер? Если это так, я думаю, вы увидите, какое у вас здесь поведение.
По сути, идея send_file заключается в том, что он устанавливает HTTP-заголовок «X-Sendfile», указывающий на файл, который вы хотите отправить. Веб-сервер видит этот заголовок и вместо того, чтобы возвращать тело вашего ответа, вместо этого отправляет указанный файл.
Преимущество этого подхода заключается в том, что ваш средний веб-сервер высоко оптимизирован для очень быстрой отправки содержимого статических файлов и обычно выполняет работу во много раз быстрее, чем сама система rails.
Итак, решения вашей проблемы:
* Используйте веб-сервер, который поддерживает X-Sendfile (например, Apache), или
* Как прокомментировал rubyprince, вместо этого используйте send_data, что заставит ruby выполнять тяжелую работу.
Кроме того, вы должны быть в состоянии подтвердить, что это то, что происходит, посмотрев на заголовки ответов, используя инструменты разработчика Firebug или Safari / Chrome.