Priorität/Schweregrad:
Hoch für selbst gehostete Instanzen, die S3-kompatiblen Backup-Speicher verwenden, da geplante Backups nach der Archivierung fehlschlagen.
Plattform:
Selbst gehostetes Discourse auf dem neuesten Branch.
Aktuelle Live-Version bei Beobachtung: v2026.4.0-latest
Ruby: 3.4.0
aws-sdk-s3: 1.182.0
Beschreibung:
Backups zu Cloudflare R2 scheitern am letzten Schritt „Archiv wird hochgeladen…".
Der Datenbank-Dump und die lokale Archivierung werden erfolgreich abgeschlossen, aber der multipart-Upload des fertigen Backup-Archivs schlägt fehl.
Tatsächliches Ergebnis:
Das Backup schlägt fehl mit:
EXCEPTION: multipart upload failed: undefined method 'downcase' for nil
Der Stack-Trace enthält:
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
Erwartetes Ergebnis:
Das Backup-Archiv sollte erfolgreich in den konfigurierten S3-kompatiblen Backup-Speicher hochgeladen werden.
Reproduzierbare Schritte:
- Backup-Speicher auf Cloudflare R2 unter Verwendung des S3-kompatiblen Backup-Pfads konfigurieren.
- Ein Backup-Archiv verwenden, das größer als der Multipart-Schwellenwert ist.
- Ein manuelles oder geplantes Backup ausführen.
- Fehler während „Archiv wird hochgeladen…" beobachten.
Relevante Konfiguration:
- 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
Beobachteter Stack-Trace-Auszug:
algorithm = resp.context.params[:checksum_algorithm]
k = "checksum_#{algorithm.downcase}".to_sym
Dies deutet darauf hin, dass checksum_algorithm im Multipart-Upload-Pfad nil ist.
Zusätzlicher Kontext:
Es gibt ein ähnliches, kürzlich erschienenes Meta-Thema zu Backblaze B2:
Außerdem scheinen Einträge im aws-sdk-s3-Änderungsprotokoll nach Version 1.182.0 relevant zu sein:
- 1.201.0: Behebung, damit Multipart-Uploads den request_checksum_calculation-Modus WHEN_REQUIRED einhalten
- 1.210.2: Fällt auf Header-Request-Prüfsummen zurück, wenn benutzerdefinierte Endpunkte oder Endpunkt-Provider für PutObject- und UploadPart-Operationen verwendet werden
Discourse main scheint aws-sdk-s3 derzeit weiterhin auf Version 1.182.0 zu fixieren:
https://raw.githubusercontent.com/discourse/discourse/main/Gemfile.lock