わお、これは相当な冒険でした。Cloudflare R2 オブジェクトストレージと Discourse インスタンスの構成をほぼ全面的に再設定しましたが、このバグは R2 に関連する正当な問題だと思われます。Cloudflare DNS レコードを修正し、DISCOURSE_CDN_URL が実際にその先を指すようにインスタンスを再構築したところ、翻訳文字列などの他の多数の機能が壊れ、コンソールには複数のエラー(CORS エラーを含む)が出力されました。今日一日、この問題で様々な調査を繰り返しました。つまり、DISCOURSE_CDN_URL の使用は Cloudflare R2 と互換性がないようです。(これは非常に奇妙でした。当初 DNS エントリを設定した際、cdn.mysite.com の DNS レコードを誤って設定し、cdn.mysite.com.mysite.com として解決されるようになっていました。)DISCOURSE_CDN_URL を正しく設定しても、Cloudflare R2 オブジェクトストレージとは互換性がないようです。ここにはまだ完全に理解していない部分があるかもしれません。
ともかく、私の PR ブランチで再構築するとすべてが修正されます。これは、カスタム絵文字のアップロードが、標準の投稿画像アップロードと同じ S3 CDN ルーティングとフォールバックロジックに従うように、代入処理を Discourse.store.cdn_url() でラップしているためです。
PR を再開し、説明を編集しました。ただし、Discourse チームがこれをマージしないことを選んだとしても、それはそれで構いません。なぜなら、テーマコンポーネントはクライアント側でこの問題を修正するからです。なお、この PR の修正は、カスタム絵文字の R2 オブジェクトストレージ構成のみを対象とし、AWS などの他の通常の S3 互換ストレージには影響しないはずです。