Class: BackupRestore::UploadsRestorer

Inherits:
Object
  • Object
show all
Defined in:
lib/backup_restore/uploads_restorer.rb

Constant Summary collapse

S3_ENDPOINT_REGEX =
/\.s3(?:\.dualstack\.[a-z0-9\-]+?|[.\-][a-z0-9\-]+?)?\.amazonaws\.com/

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(logger) ⇒ UploadsRestorer

Returns a new instance of UploadsRestorer.



24
25
26
# File 'lib/backup_restore/uploads_restorer.rb', line 24

def initialize(logger)
  @logger = logger
end

Class Method Details

.s3_regex_string(s3_base_url) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/backup_restore/uploads_restorer.rb', line 11

def self.s3_regex_string(s3_base_url)
  clean_url = s3_base_url.sub(S3_ENDPOINT_REGEX, ".s3.amazonaws.com")

  regex_string =
    clean_url
      .split(".s3.amazonaws.com")
      .map { |s| Regexp.escape(s) }
      .insert(1, S3_ENDPOINT_REGEX.source)
      .join("")

  [regex_string, clean_url]
end

Instance Method Details

#restore(tmp_directory) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/backup_restore/uploads_restorer.rb', line 28

def restore(tmp_directory)
  upload_directories =
    Dir
      .glob(File.join(tmp_directory, "uploads", "*"))
      .reject { |path| File.basename(path).start_with?("PaxHeaders") }

  if upload_directories.count > 1
    raise UploadsRestoreError.new(
            "Could not find uploads, because the uploads " \
              "directory contains multiple folders.",
          )
  end

  @tmp_uploads_path = upload_directories.first
  return if @tmp_uploads_path.blank?

  @previous_db_name = BackupMetadata.value_for("db_name") || File.basename(@tmp_uploads_path)
  @current_db_name = RailsMultisite::ConnectionManagement.current_db
  backup_contains_optimized_images = File.exist?(File.join(@tmp_uploads_path, "optimized"))

  remap_uploads
  restore_uploads

  generate_optimized_images unless backup_contains_optimized_images
  rebake_posts_with_uploads
end