Priorità/Gravità:
Alta per le istanze self-hosted che utilizzano storage di backup compatibile con S3, poiché i backup programmati falliscono dopo la creazione dell’archivio.
Piattaforma:
Discourse self-hosted sull’ultimo ramo.
Versione live corrente al momento dell’osservazione: v2026.4.0-latest
Ruby: 3.4.0
aws-sdk-s3: 1.182.0
Descrizione:
I backup su Cloudflare R2 falliscono nell’ultimo passaggio “Caricamento dell’archivio…”.
Il dump del database e la creazione dell’archivio locale vengono completati con successo, ma il caricamento multipart dell’archivio di backup finito fallisce.
Risultato effettivo:
Il backup fallisce con:
ECCEZIONE: caricamento multipart fallito: metodo 'downcase' non definito per nil
Lo stack trace include:
aws-sdk-s3-1.182.0/lib/aws-sdk-s3/multipart_file_uploader.rb
lib/backup_restore/s3_backup_store.rb:48
lib/backup_restore/creator.rb:434
Risultato atteso:
L’archivio di backup dovrebbe essere caricato con successo sullo storage di backup compatibile con S3 configurato.
Passaggi per riprodurre:
- Configurare lo storage di backup su Cloudflare R2 utilizzando il percorso di backup compatibile con S3.
- Utilizzare un archivio di backup più grande della soglia multipart.
- Eseguire un backup manuale o programmato.
- Osservare il fallimento durante il passaggio “Caricamento dell’archivio…”.
Configurazione rilevante:
- DISCOURSE_BACKUP_LOCATION=s3
- DISCOURSE_S3_ENDPOINT=https://.r2.cloudflarestorage.com
- DISCOURSE_S3_FORCE_PATH_STYLE=true
- DISCOURSE_S3_BACKUP_BUCKET=
- AWS_REQUEST_CHECKSUM_CALCULATION=WHEN_REQUIRED
- AWS_RESPONSE_CHECKSUM_VALIDATION=WHEN_REQUIRED
Estratto dello stack trace osservato:
algorithm = resp.context.params[:checksum_algorithm]
k = "checksum_#{algorithm.downcase}".to_sym
Ciò suggerisce che checksum_algorithm è nil nel percorso del caricamento multipart.
Ulteriori contesti:
Esiste un argomento Meta recente simile per Backblaze B2:
Inoltre, le voci del changelog di aws-sdk-s3 successive alla versione 1.182.0 sembrano pertinenti:
- 1.201.0: Correzione del caricamento multipart per rispettare request_checksum_calculation in modalità when_required
- 1.210.2: Ripiega sui checksum delle richieste tramite header quando si utilizzano endpoint personalizzati o provider di endpoint per le operazioni PutObject e UploadPart
Discourse main attualmente sembra ancora bloccare aws-sdk-s3 alla versione 1.182.0:
https://raw.githubusercontent.com/discourse/discourse/main/Gemfile.lock