自定义表情符号在少数页面上不使用 CDN 来存储 S3 资产

我最近将我的 Discourse 安装配置为使用 CDN,并将上传内容和站点资源存储在兼容 S3 的服务中。目前其他功能一切正常,但自定义表情符号图片无法加载。
查看 HTML 时,我注意到其中一个表情符号的 URL 为:
//thrivecommunityforum.s3.eu-central-1.wasabisys.com/original/2X/6/6b7f95a2cfc7810d26c7e170ebf926ba8634261b.png
(该链接无法加载,因为我设置了覆盖规则,在文件管理器中看到“公共写入已启用”的警告后,阻止了对存储桶的公共访问。)
而所有其他上传的图片和站点资源都正确引用了我配置的 CDN:

内置表情符号的 URL 格式如下:

因此,我的结论是:在生成图片链接时,自定义表情符号的处理逻辑可能存在缺陷,导致跳过了已配置用于前置 S3 存储文件的 CDN。

我尝试查找相关主题,但只找到了这一条:https://meta.discourse.org/t/custom-emoji-does-not-use-amazon-s3/35690。该主题似乎已过时,因为 Discourse 在我的站点上正尝试使用 S3 来提供自定义表情符号。

用于测试的自定义表情符号

:facepalm:

:mdr:

非自定义表情符号

:slightly_smiling_face:

因此,标准表情符号使用一个 CDN,而自定义表情符号使用另一个 CDN,但如果您严格按照使用对象存储进行上传(S3 克隆)的说明进行正确配置,两者均可由 CDN 覆盖。

这不是一个错误,这是预期行为,因为标准表情符号存储在应用程序代码库中,而自定义表情符号只是普通的站点上传。

我已经查看了那个线程,据我所知,我的配置应该是正确的:

  DISCOURSE_CDN_URL: https://thrivecommunity-cdn.b-cdn.net
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: eu-central-1
  DISCOURSE_S3_ENDPOINT: https://s3.eu-central-1.wasabisys.com
  DISCOURSE_S3_INSTALL_CORS_RULE: false
  DISCOURSE_S3_ACCESS_KEY_ID: aaaa
  DISCOURSE_S3_SECRET_ACCESS_KEY: aaaa
  DISCOURSE_S3_CDN_URL: https://thrivecommunity-uploads.b-cdn.net
  DISCOURSE_S3_BUCKET: thrivecommunityforum
  DISCOURSE_S3_BACKUP_BUCKET: thrivecommunityforum-backup
  DISCOURSE_BACKUP_LOCATION: s3

我也遇到过类似的问题(在迁移到 S3 时,如果原始帖子中没有其他上传内容,包含自定义表情的帖子不会被标记为需要重新烘焙,因此生成的链接没有指向 CDN)。

我的解决方法是删除并重新上传其中一个自定义表情,这会自动触发一项任务,重新构建所有包含自定义表情的帖子(不过我相信也存在可以直接用于重新烘焙包含自定义表情帖子的 Rake 任务)。

我在 admin/customize/emojis 以及帖子编辑器预览中也发现了问题,而且过去一小时内发布的帖子的“回复反应”功能也失效了。
因此,这不仅影响使用表情符号的旧帖子,还影响新帖子以及 UI 的其他部分(“回复反应”选择器也使用了错误的 URL,与管理员表情符号管理区域一样)。

这与 S3 CDN URL ignored when uploading into posts 有关。已添加到原始主题中。

由于这是第三方插件,请在插件主题中报告此问题。

这确实存在,但影响较小,因为这是仅限管理员的页面。

确实如此。如果我实际发布帖子,表情符号就能正确显示。

如果对 Retort 插件的修复方式与修复管理区域的方式类似,我或许可以尝试修复该插件,因为在我的 Discourse 实例中,自定义反应表情符号的使用非常广泛。

我在快速查看后尝试自行修复。问题似乎在于 Discourse 的 JavaScript 方法 buildEmojiUrl 接收到了自定义表情的存储 URL,而不是 CDN URL。这似乎也是 retort 插件所使用的相同问题。因此,修复这一点应该会解决所有问题,对吗?

在快速查看之后,我找到了一个似乎用于构建自定义表情 URL 的位置,并将其修改为以下内容:

我在 Rails 控制台中进行了测试,这似乎修复了我生产站点上的 URL。因此,我尝试部署该更改,但未能生效。

在尝试失败后,我还尝试将 EMOJI_VERSION 更改为 10,以触发某些更新,但这也未奏效。当我执行 launcher enter 并查看 git 日志时,确实看到了我的提交记录。我遵循了以下方法: