send_file просто отправляет пустой файл - PullRequest
13 голосов
/ 11 августа 2010

Я ищу способ скачать XML-файл. Я использую:

file_path = 'folder/' + xml_name + '.xml'
send_file file_path, :type => "text/xml"

но это всегда скачивает мне пустой файл. В самом файле содержится 16 КБ данных ...

почему это?

Maechi

Ответы [ 4 ]

24 голосов
/ 23 декабря 2010

вероятно, вы должны закомментировать

config.action_dispatch.x_sendfile_header = "X-Sendfile"

в производстве. Rb

см. http://vijaydev.wordpress.com/2010/12/15/rails-3-and-apache-x-sendfile/ для объяснений

4 голосов
/ 11 августа 2010

Проблема сохранена, но я не знаю, почему

File.open(file_path, 'r') do |f|
  send_data f.read, :type => "text/xml", :filename => "10.xml"
end

send_data работает ... но send_file нет!

3 голосов
/ 21 февраля 2012

Вы должны включить использование sendfile в ./config/environments/production.rb:

config.action_dispatch.x_sendfile_header = "X-Sendfile"

Если эта строка отсутствует (или закомментирована), Rails правильно отправит файл, но не через Apache.

Если вы получаете 0-байтовые файлы, убедитесь, что вы установили mod_xsendfile, который доступен с https://tn123.org/mod_xsendfile

Загрузите единственный исходный файл (mod_xsendfile.c) и скомпилируйте его (apxs -cia mod_xsendfile.c). Возможно, вы захотите запустить apxs от имени пользователя root, чтобы он все правильно настроил.

Затем вы захотите установить опции XSendFile и XSendFilePath в ваших файлах конфигурации Apache. Для получения дополнительной информации см. Справку по указанному выше URL.

3 голосов
/ 22 февраля 2011

Как говорит Евгений в своем ответе, в рабочей среде Rails разрешит Apache или nginx отправлять фактический файл для вас с помощью x-sendfile, если вы не используете ни один из них в качестве инфраструктуры для рельсов, вы должны закомментироватьстрока, предложенная в файле

config / environment / production.rb.

# config.action_dispatch.x_sendfile_header = "X-Sendfile"
...