send_file sendet nur eine leere Datei
-
27-09-2019 - |
Frage
Im suchend einen Weg, um eine XML-Datei zum Download bereit. Ich benutze:
file_path = 'folder/' + xml_name + '.xml'
send_file file_path, :type => "text/xml"
aber lädt mich immer eine leere Datei. Die Datei selbst hat 16 KB Daten in ihm ...
Warum?
Maechi
Lösung 2
Problem gespeichert, aber ich weiß nicht, warum
File.open(file_path, 'r') do |f|
send_data f.read, :type => "text/xml", :filename => "10.xml"
end
send_data arbeitet ... aber send_file nicht!
Andere Tipps
wahrscheinlich müssen Sie kommentieren Sie
config.action_dispatch.x_sendfile_header = "X-Sendfile"
in production.rb
finden Sie unter http: // vijaydev. wordpress.com/2010/12/15/rails-3-and-apache-x-sendfile/ für Erklärungen
Wie Eugene sagt in seiner Antwort, in einer Produktionsumgebung Rails Apache lassen wird oder die aktuelle Datei für Sie mit x-sendfile nginx senden, wenn Sie Sie äußern müssen nicht entweder von ihnen als Infrastruktur für Schienen verwenden out die Linie in der
vorgeschlagenconfig / Umgebungen / production.rb Datei.
# config.action_dispatch.x_sendfile_header = "X-Sendfile"
Sie müssen sendfile Verwendung in ./config/environments/production.rb
aktivieren:
config.action_dispatch.x_sendfile_header = "X-Sendfile"
Wenn diese Zeile nicht vorhanden (oder kommentiert out) ist, dann Rails werden die Datei korrekt senden, aber nicht durch Apache.
Wenn Sie immer 0-Byte-Dateien, dann stellen Sie sicher, dass Sie mod_xsendfile
installiert haben, die sich von https verfügbar: // tn123.org/mod_xsendfile
Laden Sie die Quelldatei (mod_xsendfile.c
) und kompilieren (apxs -cia mod_xsendfile.c
). Sie wollen wahrscheinlich apxs
als root ausführen, so dass er alles richtig eingerichtet werden.
Dann wirst du die XSendFile
und XSendFilePath
Optionen in der Apache-Konfigurationsdateien festlegen wollen. Sehen Sie sich die Hilfe bei der oben genannten URL für weitere Informationen.