Migrate a phpBB3 forum to Discourse

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

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

Исходный ID поста: 842948 ссылается на страницу 22 темы, которая уже существовала, и, по крайней мере, стартовый пост (&start=220) имеет ID (842880), меньший, чем ID ссылающегося поста.

После импорта этот исходный пост (который был опубликован всего за несколько дней до создания дампа) ссылается на семилетнюю тему, где у первого поста исходный ID равен 1353.

Мне не удаётся найти никаких подсказок, почему это происходит, никаких сходств в числах каким-либо образом… Исходная ссылка была просто обычной размещённой URL-адресом, который был автоматически превращён в ссылку phpBB. Такие ссылки в целом не вызывают никаких проблем — они работают во многих других местах.

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

3 лайка

Здравствуйте,

По моим воспоминаниям, импортер phpBB по умолчанию заполнял полное имя пользователя в Discourse, угадывая его по адресу электронной почты. Прав ли я, и актуально ли это до сих пор? Я не могу найти ничего об этом в файлах импортера…

Это именно то, чего я не хотел бы видеть при импорте следующего форума.

Также у меня ещё один вопрос.

На текущем форуме phpBB есть пользовательские поля (например, ссылки на Facebook или Instagram пользователей). Я бы хотел импортировать их в пользовательские поля Discourse. Предполагаю, что мне нужно сначала установить и настроить Discourse, добавив эти пользовательские поля, а затем импортировать данные из phpBB с помощью моего собственного скрипта импорта?

1 лайк

Это больше не происходит.

Звучит как хороший план.

6 лайков

Существует ли надёжный способ оценить ежемесячный объём писем, которые Discourse будет отправлять пользователям после миграции с phpBB? Это касается регистраций новых пользователей, упоминаний и ответов, еженедельных дайджестов и так далее. По умолчанию phpBB отправляет очень мало писем, и, думаю, нам придётся сменить текущего провайдера электронной почты.

На данный момент у меня нет подробной статистики по существующему phpBB. Форум работает с 2013 года, в нём 200 000 сообщений и 5500 участников. Новые пользователи регистрируются каждый день.

1 лайк

Сколько постов в день?

1 лайк

Я пока не знаю. У меня сейчас есть только публичная статистика. Возможно, около 20.

1 лайк

При всего 20 постах в день, думаю, вы получите максимум около 3000 писем в месяц, что вполне укладывается в бесплатный тариф Mailgun.

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

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

4 лайка

Я не согласен. Это не задача скрипта импорта, но для этого есть настройка сайта: suppress digest email after days.

4 лайка

Действительно :slight_smile: После первого импорта phpBB на мой текущий форум мне пришлось уменьшить значение по умолчанию; мой почтовый провайдер автоматически заблокировал используемый адрес из-за большого количества рассылаемых дайджест-писем. Они были помечены как спам.

1 лайк

Это не совсем одно и то же. На мой взгляд, есть разница между рассылкой дайджестов кому-то в течение X месяцев после его последнего визита (если он сам подписался на это — отсутствие посещений форума не означает, что он не читает дайджесты) и отправкой дайджестов пользователю, который никогда не подписывался на них, но был зарегистрирован в предыдущем форуме. В некоторых юрисдикциях это может быть даже незаконно! Вы можете просто отключить дайджесты для всех перенесённых пользователей, и они смогут включить их самостоятельно, либо поступить так, как сделал я: отключить их для всех, кроме тех, кто заходил за последний месяц и, следовательно, видел объявление «скоро мы перенесём форум». Я считаю, что это разумный компромисс.

Кроме того, это практично: наш форум на phpBB за последний год набрал тысячи аккаунтов спамеров, и отправка им дайджестов четыре раза в месяц исчерпала бы наш бесплатный лимит Mailgun, а затем стала бы обходиться очень дорого. Уменьшение параметра «очистка неактивных пользователей через N дней» в итоге помогло избавиться от них.

5 лайков

Не уверен, что это стоит публиковать здесь или в отдельной теме. Но речь идёт о миграции с phpBB 3, поэтому пишу сюда.

Я успешно выполнил миграцию на Discourse с одной базой данных. Однако у меня есть три разные, независимые сообщества (три разных языка, три разных установки phpBB), которые в идеале я хотел бы объединить в один большой и дружелюбный форум Discourse.

Мой вопрос: как это сделать? Что нужно изменить в скрипте импорта, в базе данных phpBB 3 или в любом другом месте?
Есть несколько пользователей, у которых есть аккаунты на обоих форумах (некоторые, возможно, даже на всех трёх), но единой системы входа (SSO) нет, поэтому у них разные аккаунты на каждом форуме с одинаковыми именами пользователей. Все это разные установки и разные базы данных.

Было бы здорово, если бы это было возможно!

Заранее спасибо за любую помощь!

1 лайк

Это не сработает «из коробки», так как скрипт импорта сохраняет оригинальные ID в базу данных Discourse и не импортирует данные с дополнительного форума, если находит запись с таким же ID. Однако я могу предложить два способа решения этой проблемы:

  1. Сложный: вам нужно отредактировать скрипт импорта в нескольких местах и добавить префикс для каждого форума в пользовательские поля import_id, которые хранятся для постов, тем, категорий и пользователей.

  2. Простой, но вы потеряете возможность инкрементального импорта: удаляйте пользовательские поля после каждого импорта.

    TopicCustomField.where(name: 'import_id').delete_all
    PostCustomField.where(name: 'import_id').delete_all
    CategoryCustomField.where(name: 'import_id').delete_all
    UserCustomField.where(name: 'import_id').delete_all
    

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

7 лайков

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

@gerhard, мои знания программирования очень базовые, а в Rails в целом и в структуре Discourse в частности я вообще ничего не понимаю — поэтому, пожалуйста, отнеситесь с пониманием к моему вопросу: есть ли возможность обработать случай, когда импортер не находит импортированный пост с указанным в ссылке ID, и вместо того, чтобы подставлять неверную ссылку, добавить текст, информирующий пользователя или администратора, чтобы такие проблемные ссылки можно было найти после импорта?

Моя главная обеспокоенность текущим подходом заключается в том, что такие ссылки выглядят как успешно заменённые, и у вас нет способа найти и исправить их вручную после импорта.

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

1 лайк

Один из способов — переписать скрипт так, чтобы он не заменял такие ссылки до завершения импорта всех сообщений. Если вам нужна помощь и у вас есть бюджет, вы можете связаться со мной или написать в Marketplace.

4 лайка

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

Ещё один вопрос: я заметил, что BB-коды обрабатываются по-разному при импорте. Например, тег [size] просто остаётся как текст, а тег [color] удаляется полностью. Я хотел использовать цвет и нашёл плагин для Discourse, но затем обнаружил, что он также удаляется при импорте. В начальном сообщении сказано, что BB-коды можно импортировать, но я не нашёл никаких настроек, которые контролировали бы, какие именно теги импортируются, а какие нет.

Если есть такая возможность, я предпочёл бы удалить теги [size], но оставить [color]. Не упустил ли я что-то в том, как это обрабатывается, и можно ли это как-то изменить?

1 лайк

Я только что обнаружил, что темы, которые были обрезаны на моём форуме phpBB и которые, как я думал, исчезли, каким-то образом перенесены в Discourse.

Как это возможно?

1 лайк

Я пытаюсь сделать это, но запутался в инструкциях: какой именно файл настроек вы имеете в виду? И когда это нужно делать — до импорта или после?
Заранее спасибо!

edit: так что, наверное, вы имеете в виду файлы настроек эмодзи в админ-панели (Admin CP)? Есть ли способ сделать это через импорт текстового файла или что-то подобное? У меня около 100 пользовательских смайликов, и я бы предпочел каким-то образом скопировать это сопоставление в Discourse. Это возможно? (Можно ли каким-то образом скопировать файл smilies.pak из phpBB в настройки Discourse?)

1 лайк

Вы же видели файл настроек импортера, верно? :wink:

3 лайка

Похоже, phpBB обрабатывает удалённые (pruned) темы иначе, чем обычные удалённые темы. В таком случае это пока не поддерживается. Вам нужно выяснить, как phpBB помечает удалённые (pruned) темы как удалённые, и доработать скрипт импорта.

3 лайка

Ааааааааааа, да, конечно! Прошло слишком много времени с тех пор, как я делал первое преобразование. Я совершенно забыл об этом, спасибо!

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

1 лайк