Проблема генерации .zip файлов в prod (Rails 3) - PullRequest
3 голосов
/ 21 января 2011

Я использую Linode в качестве решения для хостинга.У меня есть приложение rails 3, которое динамически берет mp3 (и другие носители) и создает файл .zip для загрузки.Он отлично работает в разработке, но как только я помещаю его на свой prod сервер, zip-файл все еще загружается, но когда я распаковываю его, он создает файл с именем foo-bar.zip.cpgz

, вот фрагмент кода из моего контроллера-

   def get_zip
    t = Tempfile.new("#{@foobar.slug}-#{request.remote_ip}.zip")
    Zip::ZipOutputStream.open(t.path) do |zos|
      @foobardownloads.each do |foobardownload|
        extension = File.extname(foobardownload.foobardownload_file_name).gsub(/^\.+/, '')
        zos.put_next_entry("#{foobardownload.title}.#{extension}")
        zos.print open(foobardownload.foobardownload.url).read
      end
    end
    send_file t.path, :x_sendfile => true, :type => 'application/zip', :filename => "#{@foobar.slug}.zip"
    t.close  
  end

1 Ответ

6 голосов
/ 21 января 2011

хорошо - немного покопался - на самом деле это была проблема с rails 3, nginx и send_file. решение здесь:

http://www.novafist.com/2010/09/send_file-sends-0-bytes-to-client-in-rails/

"быстрый и грязный" хак - открыть файл production.rb и раскомментировать эту строку

config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'

убедитесь, что

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

все еще закомментирован.

...