Files
fizzy/script/migrations/copy-blobs-to-pure.rb
Mike Dalessio db6b700da8 Clean up the /scripts directory
Not removing anything, just organizing scripts into subdirectories to
make it a bit more readable.
2025-07-21 09:07:15 -04:00

48 lines
1.2 KiB
Ruby
Executable File

#! /usr/bin/env ruby
require_relative "../config/environment"
def migrate(source_service_name, target_service_name)
ApplicationRecord.with_each_tenant do |tenant|
puts "\n## #{tenant}"
report = { updated: 0, skipped: 0, errors: 0 }
if ActiveStorage::Blob.count == 0
puts "No blobs found, skipping."
next
end
ActiveStorage::Blob.service = source_service = ActiveStorage::Blob.services.fetch(source_service_name)
target_service = ActiveStorage::Blob.services.fetch(target_service_name)
ActiveStorage::Blob.find_each do |blob|
if target_service.name.to_sym == blob.service_name.to_sym
report[:skipped] += 1
putc "-"
elsif target_service.exist?(blob.key)
report[:skipped] += 1
putc "S"
else
begin
blob.open do |stream|
target_service.upload(blob.key, stream, checksum: blob.checksum)
end
report[:updated] += 1
putc "."
rescue ActiveStorage::FileNotFoundError
report[:errors] += 1
putc "E"
end
end
# Update the service name of the blob.
blob.update_column :service_name, target_service_name
end
puts
pp report
end
end
migrate :local, :purestorage