Merge pull request #561 from basecamp/flavorjones/pure-storage-step-4

Complete the prod cutover to the Pure blob store.
This commit is contained in:
Mike Dalessio
2025-06-01 12:58:20 -04:00
committed by GitHub
4 changed files with 13 additions and 6 deletions
+1 -1
View File
@@ -3,6 +3,6 @@ require_relative "production"
Rails.application.configure do
config.action_mailer.default_url_options = { host: "%{tenant}.37signals.works" }
# I couldn't figure out how to configure Pure to allow updates from Kevin's digital ocean instance.
# Let's keep beta on local disk. See https://github.com/basecamp/fizzy/pull/557 for context.
config.active_storage.service = :local
end
+1 -1
View File
@@ -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
+4 -2
View File
@@ -6,10 +6,11 @@ local:
service: Disk
root: <%= Rails.root.join("storage", "tenants", Rails.env, "%{tenant}", "files") %>
<% purestorage_env_name = Rails.env.beta? ? "staging" : Rails.env %>
# We have "development", "staging", and "production" buckets configured. Note that we don't have a
# "beta" bucket. (As of 2025-06-01.)
purestorage:
service: S3
bucket: fizzy-<%= purestorage_env_name %>-activestorage
bucket: fizzy-<%= Rails.env %>-activestorage
endpoint: "https://storage.basecamp.com"
ssl_verify_peer: false # FIXME: using self-signed cert internally
force_path_style: true
@@ -19,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
+7 -2
View File
@@ -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