Send_file просто отправляет пустой файл

Мне нужен способ скачать xml файл. Я использую:

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

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

почему?

Maechi

Ответы

Ответ 1

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

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

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

Ответ 3

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

config/environment/production.rb.

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

Ответ 4

Вы должны включить использование 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-адресу.