La valeur trop longue pour le type character varying(1000) m’indique que c’est lié à l’extrait. C’est surprenant car techniquement nous limitons les extraits à 150 caractères, donc ce cas ne devrait jamais arriver. Au début, j’ai pensé à un bug dans notre générateur d’extraits, mais en regardant le code de l’extrait dans le chat, j’ai vu ceci :
def build_excerpt
# affiche juste l'URL si le message entier est une URL, car nous ne pouvons pas extraire les oneboxes
return message if UrlHelper.relaxed_parse(message).is_a?(URI)
# les messages contenant uniquement des téléversements sont mieux représentés par le nom du fichier
return uploads.first.original_filename if cooked.blank? && uploads.present?
# cela peut retourner une chaîne vide pour des choses complexes comme les citations, c'est acceptable
PrettyText.excerpt(cooked, EXCERPT_LENGTH, strip_links: true, keep_mentions: true)
end
Un débogage rapide a montré que nous n’atteignons en fait jamais PrettyText.excerpt et que nous nous arrêtons à la première instruction return. Apparemment, les ??? font que notre code pense qu’il s’agit d’une URL :
[1] pry(main)> UrlHelper.relaxed_parse("???\ntest").is_a?(URI)
=> true