Rails 3 アプリケーションで Paperclip + AWS S3 が動作していて、モデルに関連する添付ファイルを圧縮したい場合、どうすればよいですか?
質問する
621 次
1 に答える
4
注: stackoverflow のいくつかの質問は古くなっています。いくつかのペーパークリップ メソッドはなくなりました。
ユーザーを取得したとしましょう:has_many => user_attachments
GC.disable
@user = User.find(params[:user_id])
zip_filename = "User attachments - #{@user.id}.zip" # the file name
tmp_filename = "#{Rails.root}/tmp/#{zip_filename}" # the path
Zip::ZipFile.open(tmp_filename, Zip::ZipFile::CREATE) do |zip|
@user.user_attachments.each { |e|
attachment = Paperclip.io_adapters.for(e.attachment) #has_attached_file :attachment (,...)
zip.add("#{e.attachment.original_filename}", attachment.path)
}
end
send_data(File.open(tmp_filename, "rb+").read, :type => 'application/zip', :disposition => 'attachment', :filename => zip_filename)
File.delete tmp_filename
GC.enable
GC.start
Errno::ENOENT
秘訣は、例外を回避するために GC を無効にすることです。GC は、ダウンロードした添付ファイルを圧縮する前に S3 から削除します。
ソース:
マスターで to_file が壊れていますか?
io_adapters.for(object.attachment).path がランダムに失敗する
于 2012-12-18T15:05:18.773 に答える