diff --git a/lib/tasks/zip_pack.rake b/lib/tasks/zip_pack.rake index e3215090b..9cfb36a8e 100644 --- a/lib/tasks/zip_pack.rake +++ b/lib/tasks/zip_pack.rake @@ -38,9 +38,8 @@ namespace :zip_pack do def zip_homework_pdf homeworks, folder, parallel_size Dir.mkdir(folder) unless File.directory?(folder) - homeworks = homeworks.includes(:score_student_works) - Parallel.each(homeworks, in_processes: 2) do |homework| + homeworks.includes(:score_student_works).each do |homework| out_file_name = "#{Time.now.strftime("%Y%m%d%H%M%S").to_s}-#{homework.course_id}-#{homework.name}.zip" out_file_name.gsub!(" ", "-") out_file_name.gsub!("/", "_") @@ -51,21 +50,26 @@ namespace :zip_pack do if student_works.size > 0 pdfs = [] + file_paths = [] + student_works.find_in_batches(batch_size: 500) do |sw| + Parallel.each(sw, in_threads: parallel_size) do |student_work| + export = ExportShixunReportService.new(homework, student_work) + pdf = export.to_pdf + pdfs << pdf + file_paths << {filename: export.filename, path: pdf.path} + puts "out: #{export.filename}_#{pdf.path}" + end + end + Zip::File.open(zipfile_name, Zip::File::CREATE) do |zip| - student_works.find_in_batches(batch_size: 500) do |sw| - Parallel.each(sw, in_processes: parallel_size) do |student_work| - export = ExportShixunReportService.new(homework, student_work) - pdf = export.to_pdf - pdfs << pdf - begin - zip.add(export.filename, pdf.path) - puts "out: #{export.filename}_#{pdf.path}" - rescue => ex - Rails.logger.error(ex.message) + file_paths.each do |pdf| + begin + zip.add(pdf[:filename], pdf[:path]) + rescue => ex + Rails.logger.error(ex.message) - zip.get_output_stream('FILE_NOTICE.txt'){|os| os.write("文件重复:#{export.filename}") } - next - end + zip.get_output_stream('FILE_NOTICE.txt'){|os| os.write("文件重复:#{export.filename}") } + next end end end