2010-08-11 16 views
13

Sto cercando un modo per scaricare un file xml. Io uso:send_file invia solo un file vuoto

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

ma questo sempre mi scarica un file vuoto. Il file stesso contiene 16 KB di dati ...

perché?

Maechi

+0

il 'file_path' è corretto? – jigfox

+0

Sì file_path è corretto! – Markus

risposta

4

problema salvato, ma io non so perché

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

Send_Data funziona ... ma send_file no!

+0

non ha funzionato per me .. entrambi hanno lo stesso problema in prod .. ho controllato il config per prod e il è disabilitato x_sendfile_header – mariomol

24

probabilmente necessario commentare

config.action_dispatch.x_sendfile_header = "X-Sendfile"

in production.rb

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

+1

Se si sta usando nginx, si dovrebbe usare: config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect ' – barbolo

+0

Questa risposta funziona per me, ma presumo che l'installazione/attivazione di mod_xsendfile sia la soluzione preferita. –

3

Come Eugene dice nella sua risposta, in una produzione enviroment Rails vi permetterà di Apache o nginx invia il file corrente per te con x-sendfile, se non utilizzi nessuno di questi come l'infrastruttura per i binari devi commentare la riga suggerita nel

file config/environments/production.rb.

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

+1 per spiegare in realtà perché rimuovere questa intestazione. Su Heroku sto usando Unicorn. – superluminary

3

è necessario abilitare l'utilizzo sendfile in ./config/environments/production.rb:

config.action_dispatch.x_sendfile_header = "X-Sendfile" 

Se questa riga non è presente (o commentato), quindi Rails correttamente inviare il file, ma non attraverso Apache.

Se hai trovato i file 0-byte, quindi assicurarsi di aver installato mod_xsendfile, che è disponibile da https://tn123.org/mod_xsendfile

Scaricare il file sorgente singola (mod_xsendfile.c) e compilarlo (apxs -cia mod_xsendfile.c). Probabilmente vorrai eseguire apxs come root in modo che possa configurare tutto correttamente.

Quindi devi impostare le opzioni XSendFile e XSendFilePath nei file di configurazione di Apache. Vedere la guida all'URL sopra per ulteriori informazioni.