Migration von S3/Spaces-Uploads (keine Bilder) auf lokalen Speicher

Ich habe folgende Seite gelesen:

Daraufhin habe ich lib/tasks/uploads.rake:migrate_from_s3 untersucht und folgendes gefunden:

    .where("raw LIKE '%.s3%.amazonaws.com/%' OR raw LIKE '%(upload://%'")

Mir ist jedoch aufgefallen, dass Video-Uploads nicht das rohe upload://-Pseudoprotokoll erhalten, sondern stattdessen einfach als direkte Links zum Speicheranbieter enden (in meinem Fall DigitalOcean Spaces).

Es liegt auf der Hand, dass ich diese Aufgabe anpassen muss, damit sie erfolgreich ist.

Wäre es sinnvoller, entweder anstelle von oder zusätzlich zur direkten Referenz auf Amazon die Werte SiteSetting.s3_endpoint und SiteSetting.s3_upload_bucket zu prüfen?

Gibt es Tests für die Aufgaben? Ich sehe keine. Ich habe eine Lösung, die wie die offensichtliche Korrektur aussieht, aber keine Möglichkeit, bestehende Tests zu erweitern, und keine einfache Methode, um nicht-destruktiv zu testen. Das macht mich unsicher…

index 0761c4712a..63f49155f3 100644
--- a/lib/tasks/uploads.rake
+++ b/lib/tasks/uploads.rake
@@ -129,12 +129,12 @@ def migrate_from_s3
 
   Post
     .where("user_id > 0")
-    .where("raw LIKE '%.s3%.amazonaws.com/%' OR raw LIKE '%(upload://%'")
+    .where("raw LIKE '%.s3%.amazonaws.com/%' OR raw LIKE '%#{SiteSetting.Upload.absolute_base_url}%' OR raw LIKE '%(upload://%'")
     .find_each do |post|
     begin
       updated = false
 
-      post.raw.gsub!(/(\/\/[\w.-]+amazonaws\.com\/(original|optimized)\/([a-z0-9]+\/)+\h{40}([\w.-]+)?)/i) do |url|
+      post.raw.gsub!(/(\/\/[\w.-]+(amazonaws\.com|#{Regexp.quote(SiteSetting.s3_endpoint)})\/(original|optimized)\/([a-z0-9]+\/)+\h{40}([\w.-]+)?)/i) do |url|
         begin
           if filename = guess_filename(url, post.raw)
             file = FileHelper.download("http:#{url}", max_file_size: max_file_size, tmp_file_name: "from_s3", follow_redirect: true)

Außerdem erwarte ich aus Erfahrung, dass das System, obwohl alle diese Bilder bereits optimiert sind, beschließt, 10 Tage lang alle 50 GB Bilder (insgesamt 96 GB Dateien, Original + optimiert) beim Verschieben neu zu optimieren und dabei alle E-Mail-Benachrichtigungen für die gesamte Website abzuschalten. Da ich keine gute Möglichkeit zum Testen habe, wollte ich fragen, ob das der Fall ist. Falls ja, möchte ich wissen, ob es eine Umgehung gibt, um einfach die bereits optimierten Bilder herunterzuladen.

Ich kann alle Dateien ganz einfach mit dem MinIO Client auf das lokale System kopieren. Mich interessiert, wie aufwendig es wäre, die Dateien einfach an den richtigen Ort zu legen und die Datenbank so anzupassen, dass sie auf den neuen Speicherort zeigt, ohne alle Bilder neu zu optimieren…

Ich habe es bisher noch nicht getestet, aber zumindest wurde es als PR und nicht nur als Meta-Beitrag geteilt.

Viele weitere verwandte Fehlerbehebungen, die nun durch den tatsächlichen Migrationsprozess validiert wurden, in einem neuen PR