2010-08-11 17 views
13

Estoy buscando una forma de descargar un archivo xml. Yo uso:send_file acaba de enviar un archivo vacío

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

pero esto siempre me descarga un archivo vacío. El archivo en sí tiene 16 KB de datos ...

¿por qué es eso?

Maechi

+0

es el 'file_path' correcto? – jigfox

+0

Sí file_path es correcto! – Markus

Respuesta

4

problema se ha guardado, pero no sé qué

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

send_data está trabajando ... pero no send_file!

+0

no funcionó para mí .. ambos tienen el mismo problema en prod .. revisé la configuración para prod y está deshabilitada x_sendfile_header – mariomol

24

probablemente usted tiene que comentar

config.action_dispatch.x_sendfile_header = "X-Sendfile"

en production.rb

ver http://vijaydev.wordpress.com/2010/12/15/rails-3-and-apache-x-sendfile/ explicaciones

+1

Si está usando nginx, debe usar: config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect ' – barbolo

+0

Esta respuesta me funciona, pero supongo que instalar/habilitar mod_xsendfile sería la solución preferida. –

3

Como dice Eugene en su respuesta, en una Rieles de medio ambiente de producción le permitirá Apache o nginx envíe el archivo real por usted con x-sendfile, si no usa ninguno de estos como infraestructura para los rieles, debe comentar la línea sugerida en el

archivo config/environments/production.rb.

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

+1 para explicar realmente por qué eliminar este encabezado. En Heroku estoy usando Unicornio. – superluminary

3

Debe habilitar el uso sendfile en ./config/environments/production.rb:

config.action_dispatch.x_sendfile_header = "X-Sendfile" 

Si esta línea no está presente (o comentada), entonces los carriles enviará correctamente el archivo, pero no a través de Apache.

Si recibe archivos de 0 bytes, a continuación, asegúrese de que ha instalado mod_xsendfile, que está disponible en https://tn123.org/mod_xsendfile

Descargar el archivo de fuente única (mod_xsendfile.c) y compilarlo (apxs -cia mod_xsendfile.c). Probablemente desee ejecutar apxs como root para que configure todo correctamente.

Luego va a querer configurar las opciones XSendFile y XSendFilePath en sus archivos de configuración de Apache. Consulte la ayuda en la URL anterior para obtener más información.

Cuestiones relacionadas