Migrate a vBulletin 4 forum to Discourse

I know this is a bit of an old topic, but I’ve just completed a comparably sized vb4 migration and am missing a LOT of image attachments, somewhere on the order of 75% of them I’d wager. They are not tombstoned, and all the threads have been rebaked.

Has anyone else dealt with this? How should I go about recovering those images?

Did you see errors when you did the import?

1 лайк

Yes, quite a few ‘Attachment file doesn’t exist’ errors with some ‘Couldn’t find attachment record for post.id=xxx, import_id=xxx’ sprinkled in.

The thing that has me scratching my head is that these are posts that I know have intact attachments, and that those attachments are in the ATTACHMENT_DIR global directory. The threads with missing images are missing ALL the associated images, which seems… not random.

I’m at a loss to find any common factor among the threads/posts with lost images either.

Those messages were your clue that something was amiss. All you can do is diagnose the problem an run the import again.

Every import is a snowflake. I’ve don’t dozens of them. It’s rare that one just works. If you’d like help: Discourse Migration – Literate Computing, LLC

2 лайка

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

Он импортировал пользователей и группы, но несколько раз не удавалось импортировать подкатегории.

   импортируются категории верхнего уровня...
        7 / 7 (100.0%)  [902 элементов/мин]   n]
импортируются дочерние категории...
Traceback (most recent call last):
        5: from script/import_scripts/vbulletin.rb:942:in `<main>'
        4: from /home/peterb/discourse/script/import_scripts/base.rb:47:in `perform'
        3: from script/import_scripts/vbulletin.rb:84:in `execute'
        2: from script/import_scripts/vbulletin.rb:287:in `import_categories'
        1: from script/import_scripts/vbulletin.rb:287:in `each'
script/import_scripts/vbulletin.rb:289:in `block in import_categories': undefined method `[]' for nil:NilClass (NoMethodError)

Я проверил различные вещи, такие как кодировка UTF8, ресурсы сервера и т. д., но теперь я немного в тупике, что ещё можно проверить.
Есть какие-нибудь идеи?
Спасибо.

Сейчас я импортирую 8 миллионов постов из vBulletin. Я добавил поддержку лайков (похоже, это какой-то плагин или модификация) и опросов.

Из сообщения об ошибке не совсем понятно, в чём проблема. Я предполагаю, что где-то не находится parentid.

Думаю, нужно как-то исправить

    parent_category_id: category_id_from_imported_category_id(category["parentid"])

так, чтобы это не приводило к ошибке, если category['parentid'] равен nil.

1 лайк

Спасибо. Я ещё раз посмотрел, и похоже, что администраторы создали «разделы» категорий, установив родительский ID равным -1… которого не существует.

3 лайка

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

3 лайка

Типичная ситуация с любой миграцией данных: какой бы скрипт вы ни нашли, он никогда не учтёт все возможные сценарии. Не помогает и то, что единственное время, когда у меня есть возможность поработать над этим, — это глубокая ночь (это бесплатная работа для моего автоклуба). Сайт на vBulletin довольно сильно кастомизирован, так что посмотрим, какие ещё сюрпризы меня ждут.

4 лайка

Я понимаю, что существует скрипт для импорта из vBulletin 4, но я не вижу ничего касательно перенаправления всех URL-адресов в новый формат URL Discourse.

Как вы с этим справляетесь? Что происходит со всеми внешними ссылками на ваших форумах?

Вот оно:

3 лайка

Спасибо, @RGJ, но не могли бы вы объяснить, как это работает в реальной жизни? Что именно делает этот скрипт? Создает ли он какие-то псевдонимы URL-адресов (в Discourse) для текущих/правильных импортированных URL-адресов Discourse?

Как бы вы порекомендовали перенести старый домен на Vbulletin (www.example1.com) на новый домен на Discourse (www.exmple2.com)?

Мне кажется, что в идеале старый домен форума должен перенаправлять весь входящий трафик и ссылки на новый домен на основе списка правил 301-перенаправления. Как бы вы порекомендовали составить такой список правил перенаправления?

Вам не обязательно менять домен, но если вы решите это сделать, процесс будет состоять из двух шагов.

  1. перенаправьте ВСЁ с старого домена на новый
  2. постоянные ссылки Discourse преобразуют URL в стиле vBulletin в правильные темы Discourse.

Если вы не меняете домен, а просто указываете на новую установку Discourse, то вам нужен только шаг #2.

1 лайк

Как обстоят дела с перенаправлениями HTTP-заголовков в Discourse — 301 или 302?

Меня интересует, с точки зрения SEO, повлияет ли смена домена на позиции в выдаче.

301 Moved Permanently

Само слово «permalink» говорит за всё :slight_smile:

1 лайк

Вы можете убедиться в этом сами, посетив /admin/customize/permalinks и создав постоянную ссылку, чтобы посмотреть, как это работает.

У меня проблема с неполным импортом вложений, похожая на ту, что упоминалась ранее, но скрипт не выдаёт никаких ошибок.
База данных небольшая (71 МБ), и весь импорт завершается за 0 мин 23 сек.


Большинство вложений отсутствуют в сообщениях.
Я выполнил SQL-запросы к моей базе данных vb4 напрямую, как они указаны в скрипте, и они возвращают корректные данные, поэтому пока не понимаю, в чём проблема…

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

У меня есть скрипт для их импорта, но я ещё не успел отправить pull request.

Да, я думаю, что вы правы, @pfaffman, это действительно так.
Я буду ждать этот скрипт, когда вы его загрузите!

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

1 лайк