send_file apenas envia um arquivo vazio
-
27-09-2019 - |
Pergunta
Estou procurando uma maneira de baixar um arquivo XML. Eu uso:
file_path = 'folder/' + xml_name + '.xml'
send_file file_path, :type => "text/xml"
Mas isso sempre me baixar um arquivo vazio. O próprio arquivo tem 16 kb de dados ...
por que é que?
Maechi
Solução 2
Problema salvo, mas não sei por que
File.open(file_path, 'r') do |f|
send_data f.read, :type => "text/xml", :filename => "10.xml"
end
send_data está funcionando ... mas send_file não!
Outras dicas
Provavelmente você tem que comentar
config.action_dispatch.x_sendfile_header = "X-Sendfile"
em Production.rb
Vejo http://vijaydev.wordpress.com/2010/12/15/rails-3-and-apache-x-sendfile/ para explicações
Como Eugene diz em sua resposta, em um ambiente de produção de produção permitirá que o Apache ou o nginx enviem o arquivo real para você com o X-sendfile, se você não usar nenhum deles como a infraestrutura de trilhos, você deve comentar a linha sugerida no
Config/ambientes/Production.rb Arquivo.
# config.action_dispatch.x_sendfile_header = "X-Sendfile"
Você deve ativar o uso do sendfile em ./config/environments/production.rb
:
config.action_dispatch.x_sendfile_header = "X-Sendfile"
Se essa linha não estiver presente (ou comentada), os Rails enviarão corretamente o arquivo, mas não através do Apache.
Se você estiver recebendo arquivos de 0 byte, verifique se você instalou mod_xsendfile
, que está disponível em https://tn123.org/mod_xsendfile
Baixe o arquivo de origem único (mod_xsendfile.c
) e compilá -lo (apxs -cia mod_xsendfile.c
). Você provavelmente quer correr apxs
como raiz, para configurar tudo corretamente.
Então você vai querer definir o XSendFile
e XSendFilePath
Opções em seus arquivos de configuração do Apache. Veja a ajuda no URL acima para obter mais informações.