diff --git a/app/jobs/cron/pjs_migration_cron_job.rb b/app/jobs/cron/pjs_migration_cron_job.rb deleted file mode 100644 index afe3f543c..000000000 --- a/app/jobs/cron/pjs_migration_cron_job.rb +++ /dev/null @@ -1,26 +0,0 @@ -class Cron::PjsMigrationCronJob < Cron::CronJob - self.schedule_expression = "every 15 minutes" - - def perform(*args) - # avoid reschedule enqueued jobs - # but ignore fail jobs - return if migration_jobs.count > 100 - - blobs = ActiveStorage::Blob - .where.not("key LIKE '%/%'") - .limit(200_000) - - blobs.in_batches { |batch| batch.ids.each { |id| PjsMigrationJob.perform_later(id) } } - end - - def self.schedulable? - ENV.fetch("MIGRATE_PJS", "enabled") == "enabled" - end - - private - - def migration_jobs - Delayed::Job - .where(queue: 'pj_migration_jobs') - end -end diff --git a/app/jobs/pjs_migration_job.rb b/app/jobs/pjs_migration_job.rb deleted file mode 100644 index eeeb1dc67..000000000 --- a/app/jobs/pjs_migration_job.rb +++ /dev/null @@ -1,43 +0,0 @@ -require 'fog/openstack' - -class PjsMigrationJob < ApplicationJob - queue_as :pj_migration_jobs - - def perform(blob_id) - blob = ActiveStorage::Blob.find(blob_id) - - return if already_moved?(blob) - - service = blob.service - container = service.container - old_key = blob.key - new_key = "#{blob.created_at.strftime('%Y/%m/%d')}/#{old_key[0..1]}/#{old_key}" - - excon_response = client.copy_object(container, - old_key, - container, - new_key, - { "Content-Type" => blob.content_type }) - - if excon_response.status == 201 - blob.update_columns(key: new_key) - client.delete_object(container, old_key) - end - rescue Fog::OpenStack::Storage::NotFound - blob.attachments.destroy_all - end - - def already_moved?(blob) - blob.key.include?('/') - end - - private - - def client - @client ||= begin - credentials = Rails.application.config.active_storage - .service_configurations['openstack']['credentials'] - Fog::OpenStack::Storage.new(credentials) - end - end -end