Recientemente configuré mis instalaciones de Discourse para usar una CDN y almacenar las cargas y los recursos del sitio en un servicio compatible con S3. Hasta ahora, todo lo demás ha funcionado, pero nuestras imágenes de emojis personalizados no se cargan.
Al examinar el HTML, noté que la URL de uno de los emojis es //thrivecommunityforum.s3.eu-central-1.wasabisys.com/original/2X/6/6b7f95a2cfc7810d26c7e170ebf926ba8634261b.png
(esto no carga porque configuré una anulación para evitar el acceso público al bucket después de ver en el administrador de archivos una advertencia de que la escritura pública estaba habilitada para los archivos),
mientras que todas las demás imágenes cargadas y los recursos del sitio hacen referencia correctamente a la CDN que configuré: https://thrivecommunity-uploads.b-cdn.net/original/2X/6/62f6697da0e3cd71a7d4f1eed518641f8428150b.jpeg
Las URL de los emojis integrados se ven así: https://thrivecommunity-cdn.b-cdn.net/images/emoji/twitter/thinking.png?v=9
Por lo tanto, concluyo que podría haber un error en el manejo de emojis personalizados al generar los enlaces de las imágenes, lo que omite el uso de la CDN configurada para estar frente a los archivos almacenados en S3.
Intenté encontrar temas relevantes, pero solo encontré esto: Custom Emoji does not use Amazon S3, que parece estar desactualizado, ya que Discourse está intentando usar S3 para servir emojis personalizados en mi sitio.
Los emojis estándar utilizan un CDN mientras que los personalizados usan otro, pero ambos están cubiertos por el CDN si realizas una configuración adecuada siguiendo al pie de la letra Using Object Storage for Uploads (S3 Clones).
No es un error, este es el comportamiento esperado porque los emojis estándar están almacenados dentro del código de la aplicación y los personalizados son simplemente una carga normal del sitio.
Tuve un problema similar (las publicaciones que contenían emojis personalizados no se marcaban para rebake durante la migración a S3 si no había otras cargas en el texto sin formato de la publicación, y por lo tanto el enlace cocinado no apuntaba a la CDN).
Lo solucioné eliminando y volviendo a cargar solo uno de los emojis personalizados, lo que activó automáticamente una tarea que reconstruyó todas las publicaciones con emojis personalizados (pero estoy seguro de que también existe una tarea rake que se puede usar para rebakear directamente las publicaciones con emojis personalizados).
Veo el problema tanto en admin/customize/emojis como en la vista previa del editor de publicaciones. Además, las reacciones de réplica en publicaciones realizadas en la última hora fallan.
Esto no afecta solo a las publicaciones antiguas que usan emojis, sino también a las nuevas publicaciones y a partes de la interfaz de usuario (el selector de reacciones de réplica también utiliza la URL incorrecta, al igual que el área de administración de emojis).
Así es. Si realmente publico, el emoji se muestra correctamente en la publicación.
Si la solución para el plugin Retort es similar a la forma en que se solucionaría el área de administración, podría intentar arreglar el plugin, ya que los emojis de reacción personalizados se usan bastante en mi instancia de Discourse.
Lo intenté arreglar yo mismo después de echar un vistazo rápido.
Parece que el problema es que el método de JavaScript de Discourse buildEmojiUrl recibe la URL de almacenamiento en lugar de la URL de la CDN para los emojis personalizados. Esto parece ser lo mismo que también utiliza el plugin retort.
Por lo tanto, al corregir eso, probablemente se resolverían todos los problemas, ¿verdad?
Después de ese vistazo rápido, encontré un lugar que parece construir las URLs para los emojis personalizados y lo cambié a esto:
Lo probé con la consola de Rails y parece que corrige las URLs en mi sitio de producción. Así que intenté implementar ese cambio allí, pero no funcionó.
Después de que eso no funcionara, también intenté cambiar EMOJI_VERSION a 10 para intentar forzar una actualización, pero tampoco funcionó. Cuando ejecuto launcher enter y veo el registro de git, veo mi commit allí. Seguí el enfoque descrito aquí: