Ошибка value too long for type character varying(1000) указывает на то, что проблема связана с отрывком. Это удивительно, поскольку технически мы ограничиваем длину отрывка в 150 символов, поэтому такой случай не должен возникать. Сначала я подумал, что это баг в нашем конструкторе отрывков, но, посмотрев на код отрывка в чате, я увидел следующее:
def build_excerpt
# просто показываем URL, если всё сообщение — это URL, так как мы не можем делать отрывки для oneboxes
return message if UrlHelper.relaxed_parse(message).is_a?(URI)
# сообщения, содержащие только загрузки, лучше представлять именем файла
return uploads.first.original_filename if cooked.blank? && uploads.present?
# это может вернуть пустое значение для некоторых сложных случаев, например цитат, что допустимо
PrettyText.excerpt(cooked, EXCERPT_LENGTH, strip_links: true, keep_mentions: true)
end
Быстрая отладка показала, что мы на самом деле никогда не доходим до PrettyText.excerpt, а останавливаемся на первом return. Оказывается, ??? заставляет наш код думать, что это URL:
[1] pry(main)> UrlHelper.relaxed_parse("???\ntest").is_a?(URI)
=> true