2011-01-21 7 views
3

私は私のホスティングソリューションとしてLinodeを使用しています。私は動的にmp3s(および他のメディア)を取り、ダウンロード用の.zipファイルを作成するレール3アプリを持っています。これは、開発に正常に動作しますが、私はまだ私のprodサーバー上のダウンロードをzipファイルをそれを置くが、私はそれを解凍するとき、それはファイルを作成したら、FOO-bar.zip.cpgz相続人prodでの.zipファイルの生成に関する問題(Rails 3)

私のコントローラからのコードスニペットと呼ばれる -

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 
+0

また、私はnginxを使用していることを言及する必要があります。 – BandsOnABudget

+0

begin/ensure/endブロックを使用して、例外の場合に一時ファイルが閉じられるようにする必要があります。また、tempfile( 't.unlink')を閉じた後(確実に句の中で)、一時ファイルのリンクを解除するべきです。 – skalee

答えて

6

ok - これは実際にはレール3、nginx、& send_fileで問題になりました。解決策はここにある:

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

"間に合わせ" ハックは

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

を確認してくださいあなたのproduction.rbファイルやコメントを解除し、このラインを開くことであろう

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

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

+0

その変更はApache2でも同様に動作するようです。再帰的に圧縮されたzipファイルで同じ問題が発生しました。この変更は私のためのものを修正しました。 – samullen

+0

ノヴァフィストサイトはダウンしていますが、解決策はこの回答に含まれています。ハックではなく、正しく設定しています。 –

関連する問題