'Using an existing image on s3 with Carrierwave?

I'm trying to use existing images on my s3 and relate them to a carrierwave object. These images are stored in a different location from the store_dir of my uploader.

I currently have my migration setup using remote_image_url but it is extremely slow and I don't think re-uploading them is necessary.

So, is it possible to point my uploader to an existing image that uses a folder structure different from my store_dir?

Here's an example of what I have now.

example block from migration:

ActiveRecord::Base.connection.execute(update_images)

    Models::Product.where('image IS NOT NULL').select(:id, :image).find_in_batches(batch_size: 500).with_index do |group, batch|
      puts "Processing group ##{batch}"

      group.each do |prod|
        next unless prod[:image].present?

        image = Models::ProductImage.new(product_id: prod[:id])
        image.remote_image_url = prod[:image]
        image.save
      end

      sleep(7)
    end

uploader:

class ImageUploader < CarrierWave::Uploader::Base
  storage :fog

  def filename
    "#{secure_token}.#{file.extension}" if original_filename.present?
  end

  def store_dir
    "#{ENV['RACK_ENV']}/#{sub_folder}"
  end

  def cache_dir
    "#{ENV['RACK_ENV']}/#{sub_folder}"
  end

  def extension_allowlist
    %w(jpg jpeg gif png)
  end

  def size_range
    1.byte..10.megabytes
  end

  def sub_folder
    case model
    when Models::UserImage
      'user_images'
    when Models::ProductImage
      'product_images'
    else
      'misplaced'
    end
  end

  protected

  def secure_token
    var = :"@#{mounted_as}_secure_token"
    model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
  end
end


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source