2010-08-11 7 views
13

Je cherche un moyen de télécharger un fichier XML. J'utilise:send_file envoie juste un fichier vide

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

mais cela me télécharge toujours un fichier vide. Le fichier lui-même contient 16 Ko de données ...

pourquoi est-ce?

Maechi

+0

est-ce que 'file_path' est correct? – jigfox

+0

Oui file_path est correct! – Markus

Répondre

4

Problème sauvé, mais je ne sais pas pourquoi

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

send_data travaille ... mais pas send_file!

+0

n'a pas fonctionné pour moi .. les deux ont le même problème dans prod .. j'ai vérifié la config pour prod et le est désactivé x_sendfile_header – mariomol

24

probablement vous devez commenter

config.action_dispatch.x_sendfile_header = "X-Sendfile"

dans production.rb

voir http://vijaydev.wordpress.com/2010/12/15/rails-3-and-apache-x-sendfile/ des explications

+1

Si vous utilisez nginx, vous devez utiliser: config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect ' – barbolo

+0

Cette réponse fonctionne pour moi, mais je suppose que l'installation/activation de mod_xsendfile serait la solution préférée. –

3

Comme Eugene dit dans sa réponse, dans un environnement de production Rails laisser Apache ou nginx envoyer le fichier réel pour vous avec x-sendfile, si vous n'utilisez pas l'un de ceux-ci comme l'infrastructure pour les rails, vous devez commenter la ligne suggérée dans le

fichier config/environments/production.rb.

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

+1 pour expliquer réellement pourquoi enlever cet en-tête. Sur Heroku, j'utilise Unicorn. – superluminary

3

Vous devez activer l'utilisation sendfile dans ./config/environments/production.rb:

config.action_dispatch.x_sendfile_header = "X-Sendfile" 

Si cette ligne est absente (ou commentée), puis Rails correctement envoyer le fichier, mais pas par Apache.

Si vous obtenez des fichiers de 0 octet, assurez-vous que vous avez installé mod_xsendfile, qui est disponible à partir https://tn123.org/mod_xsendfile

Télécharger le fichier source (mod_xsendfile.c) et le compiler (apxs -cia mod_xsendfile.c). Vous voulez probablement exécuter apxs en tant que root afin qu'il configure tout correctement.

Ensuite, vous allez vouloir définir les options XSendFile et XSendFilePath dans vos fichiers de configuration Apache. Voir l'aide à l'URL ci-dessus pour plus d'informations.

Questions connexes