Recentemente ho configurato le mie installazioni di Discourse per utilizzare una CDN e memorizzare gli upload e le risorse del sito in un servizio compatibile con S3. Finora tutto il resto ha funzionato, ma le nostre immagini di emoji personalizzate non riescono a caricarsi.
La mia conclusione è che potrebbe esserci un bug nella gestione delle emoji personalizzate durante la generazione dei collegamenti alle immagini, che omette di utilizzare la CDN configurata come front-end per i file memorizzati su S3.
Ho cercato argomenti pertinenti, ma ho trovato solo questo: Custom Emoji does not use Amazon S3, che sembra obsoleto, dato che Discourse sta tentando di utilizzare S3 per servire le emoji personalizzate sul mio sito.
Non è un bug, questo è un comportamento previsto perché le emoji standard sono memorizzate all’interno del codice dell’applicazione, mentre quelle personalizzate sono semplicemente un normale caricamento sul sito.
Ho avuto un problema simile (i post contenenti emoji personalizzate non venivano contrassegnati per la ricottura durante la migrazione a S3 se non c’erano altri caricamenti nel post grezzo e, di conseguenza, il link cotto non puntava alla CDN).
L’ho risolto cancellando e ricaricando una sola delle emoji personalizzate; questo ha automaticamente attivato un’attività che ha ricostruito tutti i post con emoji personalizzate (ma sono sicuro che esista anche un task rake che può essere utilizzato per ricuocere direttamente i post con emoji personalizzate).
Vedo il problema anche in admin/customize/emojis, nell’anteprima dell’editor dei post e le reazioni di risposta sui post effettuati nell’ultima ora non funzionano.
Quindi questo non riguarda solo i vecchi post che utilizzano emoji, ma anche i nuovi post e parti dell’interfaccia utente (anche il selettore delle reazioni di risposta utilizza l’URL errato, come l’area di gestione delle emoji per gli amministratori).
È vero. Se pubblico effettivamente, l’emoji viene visualizzata correttamente.
Se la correzione per il plugin Retort è simile a come verrebbe corretta l’area amministrativa, potrei provare a risolvere il problema del plugin, dato che le emoji delle reazioni personalizzate sono ampiamente utilizzate sulla mia istanza di Discourse.
Ho provato a risolvere il problema da solo dopo aver dato un’occhiata veloce.
Sembra che il problema sia che il metodo JavaScript di Discourse buildEmojiUrl riceve l’URL di archiviazione invece dell’URL CDN per le emoji personalizzate. Ciò sembra essere la stessa cosa che utilizza anche il plugin retort.
Quindi, correggendo questo, probabilmente risolverebbe tutti i problemi, giusto?
Dopo questa rapida occhiata, ho individuato un punto in cui vengono costruiti gli URL per le emoji personalizzate e l’ho modificato in questo:
Ho testato con la console di Rails e sembra che questo risolva gli URL sul mio sito di produzione. Quindi ho provato a distribuire questa modifica lì, ma non ha funzionato.
Dopo che non ha funzionato, ho anche provato a cambiare EMOJI_VERSION in 10 per tentare di forzare un aggiornamento, ma anche questo non ha funzionato. Quando eseguo launcher enter e guardo il git log, vedo il mio commit lì. Ho seguito l’approccio descritto qui: