Migrate a phpBB3 forum to Discourse

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

Я получаю следующее сообщение об ошибке:
/var/www/discourse/plugins/discourse-migratepassword/plugin.rb:71:in `crypt’: несовместимые кодировки символов: ASCII-8BIT и UTF-8 (Encoding::CompatibilityError).

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

Так что же я изменил с момента, когда всё работало?

  • новая виртуальная машина с Ubuntu 18.04.3 LTS (ранее была версия 16);
  • обновлённый Discourse (последняя версия);
  • включена опция «имена пользователей в Unicode» с символами [äöüßÄÖÜẞ], так как у многих моих пользователей в именах есть умлауты (при первом импорте эта настройка отсутствовала, и пользователи были импортированы без точек над умлаутами);
  • плагин migratepassword был предустановлен (в прошлый раз я устанавливал его позже).

Есть ли идеи, на чём именно происходит сбой? Я очень хочу, чтобы мои пользователи были перенесены без изменения их имён.

1 лайк

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

6 лайков

Спасибо — это сработало :slight_smile:

2 лайка

Привет! Я провожу тестовый запуск в локальной среде, чтобы проверить возможность миграции моего форума на Discourse.

Я использовал это руководство по установке для установки Discourse.

У меня есть локальный экспорт базы данных phpBB3.
Я установил локальную версию Discourse на Mac с помощью Docker for Desktop.

Теперь я пытаюсь следовать инструкциям из этой темы, но застрял, так как использую Docker, но не Ubuntu, и всё это в локальной среде. Поэтому я не знаю, как продолжить :frowning:
В моём каталоге Discourse нет файла app.yml.

Не могли бы вы помочь мне с тем, какие шаги предпринять?

Заранее большое спасибо!

1 лайк

Извините, у меня нет опыта работы с Mac, Docker и вашей настройкой. Вы, возможно, сможете примерно следовать инструкции Импорт с использованием среды разработки… но я не смогу оказать вам поддержку в этом.

1 лайк

Думаю, вам лучше следовать «официальному руководству по установке» (даже на вашем локальном Mac) и запускать установщик именно так.

4 лайка

Ура, импорт успешно выполнен!
В итоге я просто решил взять Droplet от DigitalOcean и действовать дальше. И это сработало!

Вопрос по Sidekiq, @gerhard, вы говорите:

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

2 лайка

Если вам не нужно создавать резервную копию для восстановления на другом сервере, всё в порядке. Можете смело использовать это, и Sidekiq обработает задачи.

4 лайка

Привет! В данный момент я пытаюсь импортировать данные форума phpBB 3.1 в Discourse, но импорт опросов не работает.

Если владелец темы (создатель опроса) был удалён, во время импорта я получаю следующее сообщение об ошибке:

Ошибка создания поста 70978. Пропуск. [“У вас нет прав на создание опросов.”]

Что касается следующих вариантов опроса:
<12
12

12
я получаю следующее сообщение об ошибке:
Ошибка создания поста 345655. Пропуск. [“Опции опроса должны быть разными.”]

Как мне решить эту проблему?

Заранее спасибо.

С уважением

1 лайк

Включены ли у вас опросы?

1 лайк

Да, некоторые опросы импортированы, но не все.

1 лайк

Вам нужно создать этого пользователя или изменить скрипт, например, чтобы он использовал «system», если владелец не существует.

1 лайк

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

1 лайк

Сейчас я впервые пытаюсь выполнить миграцию с phpBB и хочу узнать, сохранит ли резервная копия Discourse, созданная позже, всю метаинформацию из импорта (например, оригинальные ID постов из phpBB). Причина в том, что я планирую выполнить импорт на более мощном сервере для ускорения процесса, а затем запустить форум на VPS, но, возможно, сделаю ещё один инкрементальный импорт после переноса всего на VPS. Интересно, достаточно ли будет сделать резервную копию Discourse и выполнить повторный импорт, или лучше выгрузить базу данных каким-то другим способом (каким именно?)

И ещё один вопрос: безопасны ли правила переписывания URL в импортере при последующей смене домена? Я планировал использовать другой домен или поддомен для начальной миграции, а затем переключиться на основной домен.

3 лайка

Да, в резервной копии в пользовательском поле хранится исходный ID поста. Запуск финального импорта в облаке должен пройти без проблем.

Смена хост-имени требует определённых усилий. Change the domain name or rename your Discourse

4 лайка

Я только что завершил первую тестовую миграцию и, прежде всего, хочу сказать спасибо @gerhard и всем остальным, кто внес свой вклад. Удивительно, насколько хорошо всё прошло с первой попытки. На импорт чуть менее 900 тысяч постов с пользователями, личными сообщениями и прочим у меня ушло примерно 24 часа, и для первой попытки результат выглядит отлично. Просто потрясающе, что у нас есть такой замечательный импортер для выполнения этой задачи.

Однако есть несколько моментов, и самый важный из них, который я сейчас пытаюсь отследить, заключается в том, что некоторые внутренние ссылки, похоже, полностью сломались, тогда как другие сработали вполне хорошо. Если быть точнее, правильных ссылок значительно больше, чем ошибочных. Я пытаюсь найти закономерность, по которой одни не сработали, а другие — сработали. Может ли кто-то поделиться опытом о том, как работает изменение внутренних ссылок? Вероятно, есть какие-то подводные камни, из-за которых процесс может завершиться неудачей?

Кстати: сразу после импорта я заметил, что во всех цитатах отсутствуют аватары, но затем выяснил, что они, похоже, генерируются, и похоже, что через 20 минут всё появилось. Это завораживает :wink:

Что касается времени импорта: это выполнялось на VPS Hetzner с 4 ядрами процессора и выделенными CPU-ядрами. Думаю, я попробую повторить это на выделенном сервере (bare metal) только для импорта, чтобы сократить время миграции. Сначала нужно посмотреть, как работает перенос резервной копии Discourse.

5 лайков

Код для замены внутренних ссылок находится здесь: discourse/script/import_scripts/phpbb3/support/text_processor.rb at 43ddf60cdf27a865b7b1aa0d54a144a3e46c74cf · discourse/discourse · GitHub

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

6 лайков

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

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

Спасибо за помощь! :+1:

1 лайк

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

1 лайк

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

Удивительно, насколько уникальным бывает каждый импорт (особенно для зрелого форума). Довольно редко импорт сводится к простому запуску скрипта (хотя, полагаю, люди охотнее нанимают меня, если их импорт сопряжён со сложностями).

1 лайк