Class: Jobs::MigrateUploadScheme

Inherits:
Scheduled show all
Defined in:
app/jobs/scheduled/migrate_upload_scheme.rb

Instance Method Summary collapse

Methods inherited from Scheduled

#perform

Methods inherited from Base

acquire_cluster_concurrency_lock!, clear_cluster_concurrency_lock!, cluster_concurrency, cluster_concurrency_redis_key, delayed_perform, #error_context, get_cluster_concurrency, #last_db_duration, #log, #perform, #perform_immediately

Instance Method Details

#execute(args) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'app/jobs/scheduled/migrate_upload_scheme.rb', line 8

def execute(args)
  return unless SiteSetting.migrate_to_new_scheme

  # clean up failed uploads
  Upload
    .where("created_at < ?", 1.hour.ago)
    .where("LENGTH(COALESCE(url, '')) = 0")
    .find_each { |upload| upload.destroy! }

  # migrate uploads to new scheme
  problems = Upload.migrate_to_new_scheme(limit: 50)

  problems.each do |hash|
    upload_id = hash[:upload].id
    Discourse.handle_job_exception(
      hash[:ex],
      error_context(args, "Migrating upload id #{upload_id}", upload_id: upload_id),
    )
  end

  # clean up failed optimized images
  OptimizedImage
    .where("LENGTH(COALESCE(url, '')) = 0")
    .find_each { |optimized_image| optimized_image.destroy! }

  # Clean up orphan optimized images
  OptimizedImage
    .joins("LEFT JOIN uploads ON optimized_images.upload_id = uploads.id")
    .where("uploads.id IS NULL")
    .find_each { |optimized_image| optimized_image.destroy! }

  # Clean up optimized images that needs to be regenerated
  OptimizedImage
    .joins(:upload)
    .where("optimized_images.url NOT LIKE '%/optimized/_X/%'")
    .where("uploads.url LIKE '%/original/_X/%'")
    .limit(50)
    .find_each do |optimized_image|
      upload = optimized_image.upload
      optimized_image.destroy!
      upload.rebake_posts_on_old_scheme
    end
end