From af8ef8b277e8c0e9e9a9097170586e92d82c4073 Mon Sep 17 00:00:00 2001 From: evazion Date: Tue, 17 May 2022 16:31:14 -0500 Subject: [PATCH] uploads: address "Failed to replace upload_media_assets..." error Sometimes uploads fail with this error: Failed to replace upload_media_assets because one or more of the new records could not be saved. Change it so that media assets are saved individually, so that if saving any of them fails we get a better error message. --- app/models/upload.rb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/models/upload.rb b/app/models/upload.rb index 06580a8fb..447326d8d 100644 --- a/app/models/upload.rb +++ b/app/models/upload.rb @@ -114,7 +114,7 @@ class Upload < ApplicationRecord if files.present? upload_media_assets = files.map do |_index, file| - UploadMediaAsset.new(file: file.tempfile, source_url: "file://#{file.original_filename}") + UploadMediaAsset.new(upload: self, file: file.tempfile, source_url: "file://#{file.original_filename}") end elsif source.present? page_url = source_extractor.page_url @@ -125,13 +125,16 @@ class Upload < ApplicationRecord end upload_media_assets = image_urls.map do |image_url| - UploadMediaAsset.new(source_url: image_url, page_url: page_url, media_asset: nil) + UploadMediaAsset.new(upload: self, source_url: image_url, page_url: page_url, media_asset: nil) end else raise Error, "No file or source given" # Should never happen end - update!(upload_media_assets: upload_media_assets, media_asset_count: upload_media_assets.size) + transaction do + update!(media_asset_count: upload_media_assets.size) + upload_media_assets.each(&:save!) + end rescue Exception => e update!(status: "error", error: e.message) end