Migrate a XenForo forum to Discourse

Мне едва удалось перевести своё существующее сообщество Xenforo в Discourse, поэтому я решил поделиться своим опытом, чтобы помочь тем, кто пытается сделать то же самое. Имейте в виду, что я не очень разбираюсь в этом, поэтому некоторые мои выводы могут быть неверны. Мне удалось завершить импорт в Discourse с потерей примерно 20% вложений. Я не могу точно объяснить причину, но проблема, похоже, затрагивает только последние 2–3 года публикаций на моём форуме, тогда как всё, что было раньше, имело успешный импорт на уровне 95% и выше. Моё единственное предположение — это связано с переходом с XF 1.x на XF 2.x.

Тем, кто пытается сделать то же самое, следует знать, что этот скрипт требует значительной доработки для работы с XF 2.x. В частности, строки 375–378 содержат неверные таблицы базы данных для импорта вложений из галереи медиа Xenforo. Мне удалось обойти эту проблему, отключив XFMG от форума и удалив его, поскольку я использовал XFMG только для зеркального отображения вложений с форума.

Если вам интересно, строка 376 ссылается на таблицу xengallery_media, что, очевидно, относится к XFMG 1.x, так как в XFMG 2.x эта таблица была переименована в xf_mg_media_item. Остальную часть мне не удалось привести в соответствие, и я подозреваю, что требуется дополнительный код для сопоставления идентификаторов вложений с постами.

В итоге я закомментировал строку 314: s = process_xf_attachments(:gallery, s),

чтобы скрипт не выдавал ошибку из-за отсутствия соответствующей SQL-таблицы.

После этого я последовал совету из поста @Jack51 в этой теме:

с внесением следующих изменений:

На шестом шаге необходимо обновить версию MariaDB. Замените mariadb-server-10.3 на mariadb-server-10.5.

На седьмом шаге следует использовать service mariadb start вместо service mysql start.

Я также изменил

frozen_string_literal: true

на

frozen_string_literal: false,

так как столкнулся с той же ошибкой, о которой упоминал кто-то другой в этой теме.

Кажется, в этой теме было много путаницы относительно того, куда помещать вложения, чтобы скрипт их обнаружил, и, признаюсь, у меня тоже возникли с этим трудности. Для тех, кто совершенно не знаком с Docker (как и я), было бы крайне полезно указать, что, хотя контейнеры Docker по сути являются виртуальными машинами, работающими на вашем сервере (то есть вы имеете дело с двумя разными операционными системами/файловыми системами), существует общее пространство для передачи файлов:

/var/discourse/shared/standalone/tmp

Эта директория находится на вашей хост-машине, и файлы, помещённые туда, будут отображаться в:

/shared/tmp

после входа в контейнер Docker. Таким образом, если вы сохраняете ту же структуру файлов/папок из Xenforo, вам нужно скопировать папки:

internal_data/attachments

в

/var/discourse/shared/standalone/tmp

на вашей хост-машине, и эта папка появится в /shared/tmp после входа в ваш контейнер Docker.

Далее, при редактировании скрипта xenforo.rb, измените:

ATTACHMENT_DIR = '/tmp/attachments'

на

ATTACHMENT_DIR = '/shared/tmp/internal_data/attachments',

и ваши вложения окажутся в правильном месте. Стоит отметить, что в Xenforo также есть папка data/attachments, но она заполнена файлами .jpg, а не нужными вам файлами .data. Кто-то ранее совершил эту ошибку в этой теме, поэтому я решил указать на неё.

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

sudo chmod a+rw -R /shared/tmp/internal_data/

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

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

На этом у меня всё. Не поймите меня неправильно, я рад, что этот скрипт вообще существует: 80% успеха лучше, чем ничего (у меня был аналогичный процент успеха при переходе с vBulletin на Xenforo в 2009 году), и я с нетерпением жду работы с платформой Discourse. Надеюсь, этот пост поможет кому-то, и, возможно, когда-нибудь кто-то с более лучшими навыками, чем у меня, обновит этот скрипт, чтобы он работал ещё лучше.

4 лайка