Backups nach Cloudflare R2 schlagen während des Multipart-Uploads mit aws-sdk-s3 1.182.0 fehl (undefined method 'downcase' for nil)

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:

  1. Backup-Speicher auf Cloudflare R2 unter Verwendung des S3-kompatiblen Backup-Pfads konfigurieren.
  2. Ein Backup-Archiv verwenden, das größer als der Multipart-Schwellenwert ist.
  3. Ein manuelles oder geplantes Backup ausführen.
  4. 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