Migrate a phpBB3 forum to Discourse

Кажется, мне не стоило прятать этот вопрос внутри другого поста.

@gerhard, как сейчас обрабатываются разные bbcodes? Это произошло по ошибке или это сделано намеренно?

2 лайка

Какой темп импорта постов в минуту вы получили при тестировании на более мощных машинах? В данный момент я запускаю импорт на 8-ядерном Xeon, и машина, похоже, почти не нагружается, при этом скорость не превышает значимо 1000 постов/мин.

Используется быстрый NVMe SSD, поэтому, полагаю, ограничение не в операциях ввода-вывода. Есть ли идеи, как ещё ускорить процесс? Я пытаюсь выиграть несколько процентов, чтобы сократить общее время импорта, возможно, на час-два (сейчас оно составляет примерно 14 часов).

1 лайк

Привет, у меня небольшая проблема… Я импортировал и конвертировал около 100 тысяч постов, а потом обнаружил, что забыл правильно настроить перенаправления ссылок (плюс к этому не связал смайлики с эмодзи в settings.yml…). Есть ли способ повторно импортировать всё, чтобы ссылки распарсились корректно, не затрагивая при этом ничего другого, что я уже настроил?
Если я снова запущу скрипт, он просто подумает, что импорт уже выполнен, и ничего не сделает, или всё же выполнит?

1 лайк

По моим наблюдениям, к сожалению, это невозможно. Система будет делать то, о чем вы сказали — игнорировать уже импортированные сообщения.

1 лайк

Есть ли способ временно «забыть» импортированные посты и выполнить повторный импорт? (Не навсегда, так как я планирую добавлять посты позже).

1 лайк

Скорее всего, это не намеренно; конвертация BB-кода в Markdown ещё не идеальна.

Звучит вполне логично, если только вы не найдёте процессор с более высокой производительностью одного ядра.

У вас есть резервная копия на момент до начала импорта? Вы можете восстановить её и запустить импорт заново. В противном случае вам не повезло, и придётся начинать всё с нуля.

1 лайк

Это неприятно. Это касается и смайликов?

Под «начать с нуля» вы имеете в виду переустановку Discourse?

1 лайк

Мне жаль это говорить, но исправление смайликов после импорта было бы очень сложным и подверженным ошибкам. Я не смогу помочь вам, если вы решите пойти по этому пути.

Да, по сути. Вы можете пропустить несколько шагов, удалив все данные и пересоздав контейнер.

./launcher stop app
rm -rf /var/discourse/shared/
./launcher rebuild app
2 лайка

Спасибо! :slight_smile: Вы имеете в виду, что после выполнения этих двух команд форум будет готов к импорту? Больше никаких шагов не требуется? (А как насчёт тем, наград, групп и всего остального, что было настроено? Есть ли способ сделать резервную копию этих данных? (для тем я знаю, как сохранить и импортировать их, но для других настроек — нет.)) (слишком много скобок)

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

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

2 лайка

Если это не совсем ясно: это полностью очищает базу данных, и вы начинаете с нуля.

Если поискать, можно найти несколько способов сохранения и восстановления настроек.

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

3 лайка

Привет, Хельми,

Друг, который работает над созданием кастомного плагина для BB-кодов, обнаружил ошибку в импортере, из-за которой теги цвета отображались некорректно.

В его словах:

Теги цвета намеренно удаляются из постов. Ошибка конвертера заключается не в том, что удаляются только закрывающие теги. «Ошибка» в том, что теги цвета НЕ удаляются для именованных цветов.

Доказательства:
https://github.com/discourse/discourse/blob/master/script/import_scripts/ph pbb3/support/text_processor.rb

    def clean_bbcodes(text)
      # Многие теги bbcode phpbb имеют прикрепленный хеш. Примеры:
      #   [url=https://google.com:1qh1i7ky]нажми здесь[/url:1qh1i7ky]
      #   [quote="cybereality":b0wtlzex]Некоторый текст.[/quote:b0wtlzex]
      text.gsub!(/:(?:\w{8})\]/, ']')

      # удаляем теги цвета
      text.gsub!(/\[\/?color(=#[a-z0-9]*)?\]/i, "")
    end

Последняя строка text.gsub!(/\[\/?color(=#[a-z0-9]*)?\]/i, "") — это регулярное выражение, которое захватывает теги цвета с хеш-кодами и закрывающие теги цвета, но не теги цвета с именованными цветами (например, color=green и т. д.).

Решение: Удалить эту строку.

text.gsub!(/\[\/?color(=#[a-z0-9]*)?\]/i, "")

Нам это на самом деле не нужно. Мы хотим сохранить эти данные о цвете, независимо от того, как мы решим их отображать. (Ну, для нашего форума это решение. Для Discourse вы, вероятно, сделаете так, чтобы удалялись все теги цвета, а не только те, что с именованными цветами).

2 лайка

Привет, Герхард, я сделал всё, как ты сказал: сначала удалил, затем заново выполнил много работы, сделал резервную копию и начал импорт. Однако на полпути понял, что совершил ошибку, поэтому остановил импорт и пришлось начать всё сначала (поскольку данные уже были импортированы).

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

При запуске Discourse Doctor сообщается: версия Discourse на [домене] НЕ НАЙДЕНА. На localhost тоже не найдена. Других ошибок нет.

Что мне нужно сделать?

Вам не нужно было пересобирать, достаточно было восстановить резервную копию.

Скорее всего, вам нужно выполнить

./launcher start import

Discourse-doctor не знает о контейнере импорта.

Возможно, вам потребуется пересобрать приложение и контейнер импорта, так как они должны быть одной версии.

Я пересобрал импорт, пересобрал приложение, но всё равно отказ в соединении. :frowning:

Вам снова нужно добавить дамп базы данных и файлы из phpBB. Вероятно, вы удалили их во время сброса.

2 лайка

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

Затем вы восстановите резервную копию, которая должна находиться в /var/discourse/shared/backups/default

И снова здравствуйте, извините, но у меня возникла ещё одна проблема…

На этот раз дело в: смайлах! Я добавил каждый смайл в settings.yml следующим образом:

happy: [‘:D’,‘:-D’]
woo: ‘:woo:’
и так далее.

Картинки смайлов я разместил в директории /var/discourse/shared/standalone/import/images/smilies.
При импорте я не видел никаких ошибок, связанных с отсутствием смайлов или подобным.

Тем не менее, смайлы не были сопоставлены с эмодзи, и в сообщениях они были преобразованы в изображения.

Что я сделал не так?

Ещё раз спасибо за вашу помощь и советы!

edit: :exploding_head: Конечно… Мне нужно сопоставлять их из phpBB3, а не из phpBB2…
Думаю, это решает проблему, но всё же мне нужно проверить, была ли это действительно причина.

edit2: Я выполнил новый импорт с новым дампом базы данных phpBB3, в который были добавлены смайлы. Смайлы по-прежнему отсутствуют. Они преобразованы в изображения и отсутствуют в наборе эмодзи. В чём может быть проблема?

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

Понимание того, что импортер делает со смайликами
Я думал, что при добавлении кодов смайликов в импортер и помещении изображений в указанный файл изображений они автоматически добавятся и в папку эмодзи. Но это не так. Поэтому вам нужно вручную импортировать изображения ваших смайликов в эмодзи.
При их импорте они должны иметь имя кода смайлика, который вы фактически будете использовать. Например, если у вас был смайлик, имя файла изображения которого — «cheery_icon0.gif», и он отображается, когда пользователи вводят :cheer:, вам нужно переименовать это изображение в cheer.gif и загрузить его в эмодзи. (в админ-панели > настройка > эмодзи)

Теперь становится еще интереснее, когда у вас есть набор смайликов, которые в phpbb отображаются с помощью таких вещей, как

<;-)
%-)
:3 

Например, у меня был смайлик

 код : <:-) и он назывался "_1partyguyhat.gif"

Сначала мне нужно было решить, каким будет новый код в Discourse, так как нельзя называть файлы с именем ‘<:-)’. Затем переименовать gif в этот код и добавить соответствующее сопоставление в файл настроек.

Так что для меня для этого конкретного смайлика это было:

party_hat: '<:-)'

Затем при импорте все вхождения в сообщении, когда кто-то ввел <:-), переводятся в :party_hat:.
Затем будет использоваться эмодзи party-hat для отображения смайлика только если он доступен в эмодзи.

Советы, когда нужно конвертировать 120 смайликов :wink:

  • создайте тестовое сообщение в вашем экземпляре phpbb3 со ВСЕМИ смайликами в нем
  • при импорте вы можете быстро просмотреть это сообщение и увидеть, остался ли какой-либо текст, или с помощью опции [edit] проверить, переведены ли какие-либо смайлики в изображения вместо простого кода эмодзи. (Поверьте, такое может случиться, если вы забудете поставить : или перепутаете ; с : )

Устранение неполадок в settings.yml

  • вам нужно раскомментировать строку emojis. (Я совершенно упустил это)
  • формат должен содержать 4 пробела перед кодом смайлика
  • вам нужно добавить все коды, даже если у вас уже был смайлик с кодом :cheer:, и вы поместили cheer.gif в эмодзи. Если вы этого не сделаете, он все равно будет переведен в файл изображения вместо кода эмодзи.
  • если у вас есть смайлик, закодированный как :yes: или :no:, вам нужно закомментировать их, иначе они будут интерпретированы как булевы значения :true: или :false:. В этом случае вам нужно сделать что-то вроде этого: "yes": ':yes:' , чтобы закодировать этот конкретный эмодзи.
  • редактирование: о, еще один забавный факт, который я забыл: если вы используете любой символ - в эмодзи, например ‘party-hat’, при загрузке изображения в Discourse он преобразует его в нижнее подчеркивание, и имя файла станет ‘party_hat’. Поэтому используйте только ‘_’, а не ‘-’.

Надеюсь, это кому-то помогло. Я знаю, что потратил почти две недели на это, прежде чем наконец правильно импортировал их все.

8 лайков