Ответ 1
Проблема сохранена, но я не знаю, почему
File.open(file_path, 'r') do |f|
send_data f.read, :type => "text/xml", :filename => "10.xml"
end
send_data работает... но send_file нет!
Мне нужен способ скачать xml файл. Я использую:
file_path = 'folder/' + xml_name + '.xml'
send_file file_path, :type => "text/xml"
но это всегда загружает мне пустой файл. Сам файл содержит 16 КБ данных...
почему?
Maechi
Проблема сохранена, но я не знаю, почему
File.open(file_path, 'r') do |f|
send_data f.read, :type => "text/xml", :filename => "10.xml"
end
send_data работает... но send_file нет!
возможно, вам нужно прокомментировать
config.action_dispatch.x_sendfile_header = "X-Sendfile"
в production.rb
см. http://vijaydev.wordpress.com/2010/12/15/rails-3-and-apache-x-sendfile/ для объяснений
Как говорит Евгений в своем ответе, в производственной среде Rails позволит Apache или nginx отправить вам фактический файл с файлом x-sendfile, если вы не используете ни одну из них в качестве инфраструктуры для рельсов, вам нужно прокомментировать линия, предложенная в
config/environment/production.rb.
# config.action_dispatch.x_sendfile_header = "X-Sendfile"
Вы должны включить использование 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-адресу.