Prioridad/Gravedad:
Alta para instancias autoalojadas que utilizan almacenamiento de copias de seguridad compatible con S3, ya que las copias de seguridad programadas fallan después de la creación del archivo.
Plataforma:
Discourse autoalojado en la rama más reciente.
Versión en vivo actual al observar el problema: v2026.4.0-latest
Ruby: 3.4.0
aws-sdk-s3: 1.182.0
Descripción:
Las copias de seguridad hacia Cloudflare R2 fallan en el paso final “Subiendo archivo…”.
La volcado de la base de datos y la creación del archivo local se completan correctamente, pero la subida multipart del archivo de copia de seguridad finalizado falla.
Resultado real:
La copia de seguridad falla con:
EXCEPCIÓN: la subida multipart falló: método 'downcase' no definido para nil
La traza de pila incluye:
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
Resultado esperado:
El archivo de copia de seguridad debería subirse correctamente al almacén de copias de seguridad compatible con S3 configurado.
Pasos para reproducir:
- Configurar el almacenamiento de copias de seguridad en Cloudflare R2 utilizando la ruta de copias de seguridad compatible con S3.
- Utilizar un archivo de copia de seguridad mayor que el umbral multipart.
- Ejecutar una copia de seguridad manual o programada.
- Observar el fallo durante “Subiendo archivo…”.
Configuración relevante:
- 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
Extracto de la traza de pila observada:
algorithm = resp.context.params[:checksum_algorithm]
k = "checksum_#{algorithm.downcase}".to_sym
Esto sugiere que checksum_algorithm es nil en la ruta de subida multipart.
Contexto adicional:
Existe un tema reciente similar en Meta para Backblaze B2:
Además, las entradas del registro de cambios de aws-sdk-s3 posteriores a la versión 1.182.0 parecen relevantes:
- 1.201.0: Corrección de la subida multipart para respetar el modo request_checksum_calculation cuando_required
- 1.210.2: Retrocede a los checksums de solicitud en encabezados al usar endpoints personalizados o proveedores de endpoints para las operaciones PutObject y UploadPart
Actualmente, Discourse main parece seguir bloqueando aws-sdk-s3 en la versión 1.182.0:
https://raw.githubusercontent.com/discourse/discourse/main/Gemfile.lock