Migrazione dei caricamenti non immagini da S3/spaces a locale

Ho letto la seguente pagina:

Quindi ho esaminato lib/taks/uploads.rake:migrate_from_s3 e ho trovato:

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

Tuttavia, ho notato che i caricamenti di video non ricevono il pseudo-protocollo upload:// grezzo, ma finiscono invece come collegamenti letterali verso il provider di archiviazione (nel mio caso, DigitalOcean Spaces).

Sembra ovvio che dovrò modificare questo task per farlo funzionare.

Sarebbe più sensato esaminare SiteSetting.s3_endpoint e SiteSetting.s3_upload_bucket, sia al posto del riferimento letterale ad Amazon, sia in aggiunta ad esso?

Ci sono test per le attività? Non ne vedo. Ho una soluzione che potrebbe essere quella ovvia, ma non ho modo di integrare i test esistenti e nessun modo semplice per testare in modo non distruttivo. Questo mi preoccupa…

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)

Inoltre, per esperienza, mi aspetto che, anche se tutte queste immagini sono già ottimizzate, il sistema decida di dover trascorrere 10 giorni a riottimizzare tutti i 50 GB di immagini (96 GB di file totali, originali + ottimizzati) mentre li sposta, disattivando tutte le notifiche email per l’intero sito durante l’operazione. Dato che non ho un buon modo per testare, volevo chiedere se è così; se lo è, vorrei sapere se esiste un modo per evitarlo, ad esempio copiando semplicemente le immagini già ottimizzate.

Posso facilmente copiare tutti i file sul sistema locale utilizzando MinIO Client. Sono curioso di sapere quanto sarebbe difficile semplicemente posizionare i file e modificare il database per puntare alla nuova posizione, senza riottimizzare tutte quelle immagini…

Non l’ho ancora testato, ma almeno è stato condiviso come pull request invece di essere solo un post sul forum.

Molti altri fix correlati, ora validati dal processo di migrazione reale, in una nuova PR