Я планирую миграцию существующего сообщества (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, так что, наверное, не очень удачно? Если вы заметили, что импортер 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.
Думаю, ваше ленивое решение может сработать. Если хотите, можно найти примеры переписывания внутренних ссылок, но ленивый подход тоже может быть хорошим.