Проблемы при импорте вложений из XenForo

Привет, ребята,

Я успешно мигрировал базу данных XenForo с 1500 участниками и ~75 000 постами на новый сервер, где установлен Discourse.

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

a) В часть сервера, связанную с Docker (где-то там)
b) В исходное расположение /var/discourse/shared/standalone/tmp/attachments

?

Кто знает путь???

Разместите файлы в любом месте, доступном с машины, выполняющей импорт, и укажите этот путь здесь:

  ATTACHMENT_DIR = '/tmp/attachments'

Если вы работаете внутри контейнера Docker и разместили файлы в var/discourse/shared/standalone/tmp/attachments, то в качестве пути укажите /shared/tmp/attachments. Вы можете проверить это, просмотрев наличие файлов, находясь внутри контейнера.

Хорошо, Джей, спасибо за информацию. В этот раз я делаю чистую установку с настройкой папки вложений. Я размещу их в /shared/tmp/attachments и вернусь сюда с результатами.

Один быстрый вопрос… есть ли способ импортировать пароли для аккаунтов?

Кто-нибудь может посмотреть, в чём проблема?

root@my-app:/var/www/discourse# RAILS_ENV=production bundle exec ruby script/import_scripts/xenforo.rb
Загрузка существующих групп...
Загрузка существующих пользователей...
Загрузка существующих категорий...
Загрузка существующих постов...
Загрузка существующих тем...

создание пользователей
Пропущено 100 уже импортированных пользователей
Пропущено 100 уже импортированных пользователей
Пропущено 100 уже импортированных пользователей
Пропущено 100 уже импортированных пользователей
Пропущено 100 уже импортированных пользователей
Пропущено 100 уже импортированных пользователей
Пропущено 100 уже импортированных пользователей
Пропущено 100 уже импортированных пользователей
Пропущено 100 уже импортированных пользователей
Пропущено 100 уже импортированных пользователей
Пропущено 100 уже импортированных пользователей
Пропущено 100 уже импортированных пользователей
Пропущено 100 уже импортированных пользователей
Пропущено 100 уже импортированных пользователей
Пропущено 4 уже импортированных пользователя

импорт категорий...
       23 / 23 (100.0%)  [326682 элемента/мин]
создание тем и постов
       74 / 74752 (  0.1%)  [99817 элемента/мин]  Traceback (most recent call last):
        18: from script/import_scripts/xenforo.rb:396:in `<main>'
        17: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
        16: from script/import_scripts/xenforo.rb:32:in `execute'
        15: from script/import_scripts/xenforo.rb:174:in `import_posts'
        14: from /var/www/discourse/script/import_scripts/base.rb:869:in `batches'
        13: from /var/www/discourse/script/import_scripts/base.rb:869:in `loop'
        12: from /var/www/discourse/script/import_scripts/base.rb:870:in `block in batches'
        11: from script/import_scripts/xenforo.rb:180:in `block in import_posts'
        10: from /var/www/discourse/script/import_scripts/base.rb:490:in `create_posts'
         9: from /var/www/discourse/script/import_scripts/base.rb:490:in `each'
         8: from /var/www/discourse/script/import_scripts/base.rb:491:in `block in create_posts'
         7: from script/import_scripts/xenforo.rb:186:in `block (2 levels) in import_posts'
         6: from script/import_scripts/xenforo.rb:315:in `process_xenforo_post'
         5: from script/import_scripts/xenforo.rb:324:in `process_xf_attachments'
         4: from /usr/local/lib/ruby/2.6.0/set.rb:338:in `each'
         3: from /usr/local/lib/ruby/2.6.0/set.rb:338:in `each_key'
         2: from script/import_scripts/xenforo.rb:326:in `block in process_xf_attachments'
         1: from /usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in `squish!'
/usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in `gsub!': can't modify frozen String (FrozenError)
root@my-app:/var/www/discourse#

На этот раз вложения я поместил в: var/discourse/shared/standalone/tmp/attachments

Я нашёл это… Проблема в том, что папка с вложениями для импорта ОБЯЗАНА находиться внутри Docker-контейнера по пути /var/www/discourse/…/tmp/attachments

Теперь всё в порядке, скрипт выполняется, завершится примерно через 1,5 часа.

Редактирование: Похоже, импорт вложений снова не работает… Сейчас я на 78% импорта, и в каждом посте, где были картинки или вложения, осталось [ATTACH]9788[/ATTACH], причём номер между тегами и номер загруженного файла совпадают, так что следующий будет [ATTACH]9789[/ATTACH]…

Буду признателен за любую помощь по этому вопросу :confused:

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

К сожалению, импорт уже завершён, и я не вижу в логе никакой информации, касающейся вложений?

Если вы запустили скрипт импорта, а директория для вложений отсутствовала, вложения были пропущены.

Я этого не делал… Я выполнил свежий импорт с вложениями на месте.

Я не думаю, что смогу помочь вам в этом вопросе. Если у вас есть бюджет, пожалуйста, ознакомьтесь с информацией по адресу: Redirecting…

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

Перед повторным запуском скрипта, находясь внутри папки, введите:

 ls /tmp/attachments

где /tmp/attachments — это путь, который вы указали в строке:

  ATTACHMENT_DIR = '/tmp/attachments'

Если вложения не отображаются в списке, вам нужно продолжить поиск их местоположения.

Хорошо, не могли бы вы точно сказать, куда нужно поместить вложения из XenForo на новый сервер, чтобы я мог быть уверен, что скрипт их найдёт?

Кто-нибудь?

Я делаю сейчас чистый импорт (пятый раз)… Я устал… :roll_eyes:

Нужно ли сортировать вложения из Xenforo в определённом порядке, или достаточно просто скопировать структуру и папку /tmp/attachments?

Сейчас я устанавливаю на новую виртуальную машину с использованием снимка (snapshot), чтобы быстро изменять настройки и начинать миграцию заново.

Вчера я поместил папку вложений из Xenforo, которая имеет следующую структуру: основная папка с именем attachments, внутри которой находятся 9 подпапок с именами от 0 до 9, а в каждой из них — около 600–700 вложений (.jpg). Я разместил эту папку в var/discourse/shared/standalone/tmp/attachments и изменил скрипт xenforo.rb, добавив:

ATTACHMENT_DIR = '/shared/tmp/attachments'

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

создание тем и сообщений
74 / 74752 ( 0.1%) [99817 элементов/мин] Traceback (most recent call last):
18: from script/import_scripts/xenforo.rb:396:in <main>' 17: from /var/www/discourse/script/import_scripts/base.rb:47:in perform’
16: from script/import_scripts/xenforo.rb:32:in execute' 15: from script/import_scripts/xenforo.rb:174:in import_posts’
14: from /var/www/discourse/script/import_scripts/base.rb:869:in batches' 13: from /var/www/discourse/script/import_scripts/base.rb:869:in loop’
12: from /var/www/discourse/script/import_scripts/base.rb:870:in block in batches' 11: from script/import_scripts/xenforo.rb:180:in block in import_posts’
10: from /var/www/discourse/script/import_scripts/base.rb:490:in create_posts' 9: from /var/www/discourse/script/import_scripts/base.rb:490:in each’
8: from /var/www/discourse/script/import_scripts/base.rb:491:in block in create_posts' 7: from script/import_scripts/xenforo.rb:186:in block (2 levels) in import_posts’
6: from script/import_scripts/xenforo.rb:315:in process_xenforo_post' 5: from script/import_scripts/xenforo.rb:324:in process_xf_attachments’
4: from /usr/local/lib/ruby/2.6.0/set.rb:338:in each' 3: from /usr/local/lib/ruby/2.6.0/set.rb:338:in each_key’
2: from script/import_scripts/xenforo.rb:326:in block in process_xf_attachments' 1: from /usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in squish!’
/usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in gsub!': can't modify frozen String (FrozenError) root@my-app:/var/www/discourse#Текст с форматированием`

2019-11-15T23:00:00Z

Я удалил ! из строки gsub! в файле:

/usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb

Теперь скрипт импорта не останавливается, а продолжает работу и показывает следующую информацию о вложениях:

В любом случае, например, последняя строка:

Could not find file /shared/tmp/attachments//2/2485-c3da9f6ee1e33d3ebf418c5dea1f9e8a.data. Skipping attachment id 2485

…файл действительно находится по этому пути, но вместо .data там есть .JPG.

Любая помощь будет принята с благодарностью.

2019-11-15T23:00:00Z

В скрипте была ошибка, я её нашёл и исправил. Теперь мне удалось успешно импортировать вложения.