Миграция с FluxBB с сохранением входящих ссылок

Всем привет,

Я планирую миграцию существующего сообщества (macscripter.net — обсуждения автоматизации в Mac OS), размещённого на FluxBB, на платформу Discourse. Эта статья выглядит многообещающей с точки зрения переноса данных. Это будет большая работа, так как у меня более 30 000 пользователей и 120 тысяч сообщений, но это кажется выполнимым.

Однако я хочу сохранить все входящие ссылки. macscripter.net является значимым справочным ресурсом для сообщества автоматизации Apple. У нас почти 20 лет публикаций, и на сайт часто ссылаются на других ресурсах и в архивах рассылки, которые я не хочу ломать.

Я ищу способ перенаправлять входящие ссылки на посты FluxBB на соответствующие посты в Discourse. Я не вижу способа сделать это в стандартной версии Discourse, поэтому предполагаю, что мне потребуется создать какой-то плагин, который будет реагировать на ссылки FluxBB вида /viewtopic.php?id=##### и перенаправлять их на соответствующие ссылки Discourse. Если у кого-то есть опыт решения подобных задач, буду рад услышать, как вы к этому подошли.

Буду благодарен за любые предложения.

С уважением,
-Марк

Большинство скриптов импорта создают постоянные ссылки, которые обрабатывают перенаправления. Я не знаю наверняка, делает ли это один из них. Если нет, вы можете посмотреть пример кода в одном из других скриптов.

У меня тот же вопрос, и я немного запутался в ответе. Я также планирую выполнить масштабный импорт из FluxBB.

Я заметил, что в Discourse есть функция под названием «Постоянные ссылки» (Permalinks) (How to make a redirect URL in a Discourse install? - #4 by cpradio), поэтому мы предполагаем, что при создании таких ссылок Discourse сможет преобразовывать URL в стиле FluxBB, например «/viewtopic.php?id=((старый id темы))», в редирект на «/t((новый slug темы))/((новый id темы))». Возможно, аналогично для отдельных постов в теме? А также для URL профилей пользователей. (Так что нам понадобится множество постоянных ссылок). Я вижу таблицу базы данных для постоянных ссылок.

Звучит как отличное решение, но импортер FluxBB не создаёт никаких постоянных ссылок. Я не вижу никакого кода для этого. Более того, я не вижу кода ни в одном из скриптов импорта (any import_scripts), который бы это делал (нет упоминания модели ActiveRecord «Permalink»).

Я был бы рад поработать над модификацией импортера FluxBB для реализации этой функции, но есть ли пример в одном из других импортеров?

Единственное, что я вижу в коде в этом контексте, — это инициализация «LookupContainer» и сохранение всех старых ID и их соответствующих новых ID. Можно ли использовать это для создания множества объектов Permalink?

Верно.

Посмотрите на импортер vbulletin (а также answerhub, vanilla, mylittleforum, bbpress, drupal для некоторых других — возможно, вы искали с учётом регистра или что-то в этом роде), который делает это в функции import_topics (игнорируйте функцию файла permalink). Вам нужен код, который добавляет постоянную ссылку, и permalink_normalization, который сопоставляет URL fluxbb с созданной вами постоянной ссылкой.

Ах! Вы правы. Мой поиск в IDE меня обманывал. На самом деле примеров создания объектов «Permalink» множество. Так что, возможно, я добавлю это в импорт для FluxBB.

Мне интересно, как прошла ваша большая импортировка, @alldritt. Похоже, macscripter.net всё ещё работает на FluxBB, так что, наверное, не очень удачно? :slight_smile: Если вы заметили, что импортер FluxBB плохо конвертирует BBCode, я работаю над различными исправлениями этой проблемы: Запрос на слияние в процессе.

Между этими обсуждениями есть интересный (неудобный) пересечение, поскольку FluxBB поддерживает BBCode вида [post=123] для ссылки на другой пост по его ID (ссылаясь на старые ID постов в исходной системе FluxBB). Будет проще справиться с этим, если у нас будет решение для перенаправления этих ID.

Нет, не упростит. Постоянные ссылки работают только для входящих ссылок, а не для внутренних. Вам нужно написать скрипт для переписывания этих внутренних ссылок как цитат в Discourse. Примеры такого решения тоже существуют.

Спасибо за оживление этой темы!

Я несколько раз пытался выполнить конвертацию, но сдался. Со временем, когда я перешёл на Mac с чипом M1, я потерял свою тестовую среду Discourse и так и не смог воссоздать её. Надеюсь вернуться к этому проекту, как только у меня появится свободное время. Я испытывал трудности с перенаправлением существующих ссылок — это был один из сложных моментов. Я ещё не успел проверить, что весь BBCode переведён корректно. Мне нужно конвертировать более 130 тысяч сообщений, что пугает своей масштабом при проверке.

Надеюсь, это вам пригодится. Вчера я работал над добавлением функциональности create_permlinks в импортер FluxBB.

На данный момент это находится в моём черновом PR. См. коммит «Add Permalink creation logic to FluxBB importer» в конце этого списка. Я надеюсь, что всё это будет когда-нибудь слито, возможно, в другом порядке (сейчас я жду, пока кто-то проверит этот базовый PR как отправную точку).

Таким образом, создаются редиректы для четырёх разных типов URL FluxBB:

  • profile.php?id=<user id>
  • viewtopic.php?pid=<post id>
  • viewtopic.php?id=<topic id>
  • viewforum.php?id=<forum id>

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


Возвращаясь к теме специальных внутренних ссылок FluxBB:

Я не собирался пытаться сохранить их как внутренние ссылки внутри нового Discourse. Ленивое решение: они будут вести на старые URL форума FluxBB (как полные URL, то есть внешние ссылки), которые благодаря этим пермалинкам затем перенаправят пользователя в нужное место на новом Discourse.

Думаю, ваше ленивое решение может сработать. Если хотите, можно найти примеры переписывания внутренних ссылок, но ленивый подход тоже может быть хорошим.