Как исправить проблемы с форматированием? — Markdown плохо конвертирован в HTML

Нам удалось перенести данные с flarum.amybo.org на форум discourse.amybo.org, но теперь форум изобилует проблемами с форматированием. Например:

@"Gerrit"#p174 Мне нравится идея жидкого средства на водной основе (как у Рабаея), поэтому я изучил состав [Nutrisorb Trace Minerals](https://www.biocare.co.uk/nutrisorbr-liquid-trace-minerals-15ml):
1. Очищенная вода, 
2. Борат натрия, 
3. Консервант (лимонная кислота), 

Превращается в:

<r><p><POSTMENTION discussionid="25" displayname="Gerrit" id="174" number="8">@"Gerrit"#p174</POSTMENTION> Мне нравится идея жидкого средства на водной основе (как у Рабаея), поэтому я изучил состав <URL url="https://www.biocare.co.uk/nutrisorbr-liquid-trace-minerals-15ml"><s>[</s>Nutrisorb Trace Minerals<e>](https://www.biocare.co.uk/nutrisorbr-liquid-trace-minerals-15ml)</e></URL>:</p>
<LIST type="decimal"><LI><s>1. </s>Очищенная вода, </LI>
<LI><s>2. </s>Борат натрия, </LI>
<LI><s>3. </s>Консервант (лимонная кислота), </LI>

Есть ли рекомендуемый способ исправить это?

Было бы здорово, если бы это можно было автоматизировать для всего форума (без отметки каждого сообщения как отредактированного), но если нет, то полуавтоматическое исправление, которое можно применять пост за постом, лучше, чем необходимость вручную удалять каждый HTML-тег, чтобы вернуться к Markdown.

Время исправлять это было тогда, когда вы делали импорт. Как человек, который занимается множеством миграций, я больше всего беспокоюсь о запуске форума с таким скомканным форматированием. Исправить скрипт импорта было бы довольно просто, а вот исправить это постфактум, после запуска, гораздо сложнее. Тогда это заняло бы, возможно, час или два, а сейчас работы в 2–5 раз больше.

Да, можно написать скрипт, который очистит всё на работающем форуме: либо (страшно) не сохранять правки (тогда не будет ни записи об редактировании, ни уведомлений), либо сделать правку и указать не поднимать тему/не отправлять уведомления. Я почти уверен, что делал это раньше. Вы бы сделали что-то вроде:

fixes = Post.where("raw like '%something broken%'")
fixes.each do |p|
   new_raw = p.raw.gsub!(some stuff)
   PostRevisor.new(p).revise!(script_user, {raw: new_raw, edit_reason: 'post fixer!'}, {bypass_bump: true)
end

Содержит ли поле raw весь этот HTML?

Я считаю, что вы можете использовать команду rake posts:remap (см. Replace a string in all posts), чтобы добиться этого; при использовании этой команды правки не должны создаваться.

Эта задача rake подходит для простых замен, но быстро становится громоздкой.

Что вы имеете в виду? Как если бы вы хотели управлять сложными регулярными выражениями — это непрактично?

Понятно. Вы вызываете задачу в оболочке, поэтому быстро определить, нужно ли экранировать Bash, Ruby или регулярное выражение, становится сложно или невозможно. Кроме того, похоже, что исправления не будут простыми заменами.

Я новичок в Discourse, но теперь узнал, как получить доступ к «сырым» данным, и да, они действительно содержат весь HTML:
https://forum.amybo.org/raw/56/9

Вы использовали существующий скрипт flarum_import.rb? Трудно представить, что HTML находится в поле p.content Flarum (именно оно передаётся в raw в скрипте импорта). Я почти уверен, что Flarum использует Markdown, поэтому не понимаю, почему в raw оказывается HTML. Или, возможно, скрипт просто настолько неработоспособен.

Но зачёркивание — это то, что есть в HTML. Возможно, это можно исправить просто с помощью CSS.

Исправление <POSTMENTION> немного сложнее, так как в Discourse есть цитаты, но нет упоминаний. Простое решение — просто заменить их на формат @${displayname} (и надеяться, что имя пользователя осталось прежним после импорта, либо выполнить поиск в user_custom_fields, чтобы найти обновлённое имя). Другой вариант — включить ссылку вроде @mention сказал [здесь](/t/-/<id темы 25>/<8>).

Безумное решение — написать скрипт, который извлекает Markdown из базы данных Flarum и обновляет поле raw, чтобы включить его. Его всё равно придётся немного почистить (как в случае с упоминаниями и POSTMENTION), но это исправит множество проблем.

Ещё одна идея — заморозить ваш сайт, массово удалить все импортированные данные, исправить скрипт импорта и запустить его заново.

Но у вас не так много новых постов с момента переезда, поэтому, возможно, их можно как-то сохранить, выполнить чистый импорт в пустую базу данных, а затем добавить их обратно. Работа с новыми пользователями будет немного сложнее.

Если у вас есть бюджет, вы можете связаться со мной или написать в Marketplace.

Спасибо, Джей. Я сам не занимался миграцией, поэтому не знаю, какой скрипт использовался. Член команды, который это делал, заболел гриппом, но я укажу ему на ваши отличные советы здесь, когда он вернётся.