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.
This commit is contained in:
evazion
2022-05-17 16:31:14 -05:00
parent 06b38a19af
commit af8ef8b277

View File

@@ -114,7 +114,7 @@ class Upload < ApplicationRecord
if files.present? if files.present?
upload_media_assets = files.map do |_index, file| 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 end
elsif source.present? elsif source.present?
page_url = source_extractor.page_url page_url = source_extractor.page_url
@@ -125,13 +125,16 @@ class Upload < ApplicationRecord
end end
upload_media_assets = image_urls.map do |image_url| 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 end
else else
raise Error, "No file or source given" # Should never happen raise Error, "No file or source given" # Should never happen
end 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 rescue Exception => e
update!(status: "error", error: e.message) update!(status: "error", error: e.message)
end end