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…