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