Vaya, qué aventura ha sido esto. Básicamente, reconfiguré todo mi almacenamiento de objetos Cloudflare R2 y mi instancia de Discourse, y creo que este error es legítimo para R2. Cuando corregí mi registro DNS de Cloudflare y reconstruí la instancia para que DISCOURSE_CDN_URL apuntara realmente a él, rompió un montón de otras cosas, como las cadenas de traducción, y lanzó múltiples errores en la consola, incluidos algunos errores de CORS. Esto me llevó por muchos caminos tortuosos hoy. Así que supongo que usar DISCOURSE_CDN_URL parece ser incompatible con Cloudflare R2. (Esto fue muy extraño: cuando configuré originalmente mi entrada DNS, ingresé incorrectamente el registro DNS de cdn.mysite.com de modo que se resolvía como cdn.mysite.com.mysite.com). Configurar DISCOURSE_CDN_URL correctamente parece ser incompatible con el almacenamiento de objetos Cloudflare R2. Puede que haya otras cosas que no entiendo del todo aquí.
En cualquier caso, cuando reconstruyo con mi rama de PR, todo se soluciona porque envuelve la asignación en Discourse.store.cdn_url() para que las cargas de emojis personalizados sigan la misma lógica de enrutamiento y respaldo de CDN de S3 que las cargas de imágenes estándar de las publicaciones.
Reabrí la PR y edité la descripción. Pero supongo que si el equipo de Discourse decide no fusionarla, está bien, porque el componente de tema soluciona el problema a nivel de cliente. Tenga en cuenta que la corrección de la PR solo debería afectar las configuraciones de almacenamiento de objetos R2 para emojis personalizados y no otros servicios compatibles con S3 como AWS.