3

ホスティング ソリューションとして Linode を使用しています。MP3 (およびその他のメディア) を動的に取得し、ダウンロード用の .zip ファイルを作成する Rails 3 アプリがあります。開発中は正常に動作しますが、製品サーバーに配置すると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
4

1 に答える 1

6

わかりました-少し掘り下げました-これは実際には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"

はまだコメントアウトされています。

于 2011-01-21T15:49:44.450 に答える