I am writing large CSV files directly to S3 in a background job (sidekiq). I am wondering how I can attach that file to the :file attribute after the file has been successfully written?
Method 1: Attach directly to Shrine in your background job
Something like this would be the simplest way:
class UploadCSVFileWorker include Sidekiq::Worker sidekiq_options retry: 5, queue: 'default' def perform(conversation_id) largeCSVFile = createCSVFile() document = Document.new(file: largeCSVFile) document.save end end
Shrine will take care of extracting the metadata associated.
Method 2: Update the URL directly
But I suspect you might be wanting to update the URL directly. I have some vague ideas, but I could be completely wrong on this because i’m not a shrine expert. You might want to manually create the associated meta data associated with your csv file and manually insert it all in your file_data column.
You can use
Shrine.uploaded_file to create a
Shrine::UploadedFile from the S3 object key, and assign it via
# `object_key` is where you've uploaded the CSV uploaded_file = ImageUploader.uploaded_file(id: object_key, storage: :store) photo.image_attacher.change(uploaded_file) photo.save
That way you’re assigning an already uploaded file, so Shrine doesn’t do any additional work other than populating the