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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top