From a43db94a83e4fef2472e01bc2dbcbd1dec697388 Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Sun, 1 Jun 2025 12:45:24 -0400 Subject: [PATCH] Update production storage to write to the Pure blob store Modify the blob copying script to update the blob service name. This completes the migration and allows us to (at some point) clean up local disk and remove the "mirror" service from the config. --- config/environments/production.rb | 2 +- config/storage.yml | 1 + script/copy-blobs-to-pure.rb | 9 +++++++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/config/environments/production.rb b/config/environments/production.rb index f960c0e81..73f7f6f1b 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -31,7 +31,7 @@ Rails.application.configure do # config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" # for NGINX # Store uploaded files on the local file system (see config/storage.yml for options). - config.active_storage.service = :mirror + config.active_storage.service = :purestorage # Mount Action Cable outside main process or domain. # config.action_cable.mount_path = nil diff --git a/config/storage.yml b/config/storage.yml index 38ac38be7..2b062460e 100644 --- a/config/storage.yml +++ b/config/storage.yml @@ -20,6 +20,7 @@ purestorage: access_key_id: <%= Rails.application.credentials.dig(:active_storage, :purestorage_service, :access_key_id) %> secret_access_key: <%= Rails.application.credentials.dig(:active_storage, :purestorage_service, :secret_access_key) %> +# TODO: remove this after we update existing blobs' service names to purestorage. mirror: service: Mirror primary: purestorage diff --git a/script/copy-blobs-to-pure.rb b/script/copy-blobs-to-pure.rb index 01b51e66e..ae906d4ea 100755 --- a/script/copy-blobs-to-pure.rb +++ b/script/copy-blobs-to-pure.rb @@ -16,7 +16,10 @@ def migrate(source_service_name, target_service_name) target_service = ActiveStorage::Blob.services.fetch(target_service_name) ActiveStorage::Blob.find_each do |blob| - if target_service.exist?(blob.key) + 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 @@ -31,7 +34,9 @@ def migrate(source_service_name, target_service_name) putc "E" end end - # blob.update_attribute :service_name, target_service_name + + # Update the service name of the blob. + blob.update_column :service_name, target_service_name end puts