db6b700da8
Not removing anything, just organizing scripts into subdirectories to make it a bit more readable.
48 lines
1.2 KiB
Ruby
Executable File
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
|