Работаю над импортом mbox из Yahoo Groups и сталкиваюсь с ошибками. Не совсем понимаю, в каком направлении двигаться дальше для отладки и импорта. Вот ошибки, которые я пока вижу:
https://pastebin.com/raw/2WTN3GTj
Вы используете скрипт mbox, верно? У меня всё сработало отлично, без ошибок. Вложения отсутствуют, но в моём случае это не критично.
Это верно, @tobiaseigen. Импорт длился более 2 часов.
В дополнение к последнему вопросу, я хотел уточнить: не был уверен, стоит ли продолжать импорт, несмотря на эти сбои. Интересно, можно ли после исправления ошибок/сбоев просто запустить импорт снова — система пропустит уже импортированные сообщения и продолжит корректный импорт.
@gerhard, возможно, нам нужна здесь какая-то информация и помощь… Даже после изучения вашего руководства Sidekiq не отображает обработку этих ~35 000 сообщений.
Не уверен, что Sidekiq здесь имеет значение — скрипт импорта, кажется, работает вне Discourse.
На всякий случай, если это поможет, вот мой лог импорта. На самом деле есть несколько строк, похожих на ваши, но я просто решил не беспокоиться об этом. Жизнь слишком коротка.
Поскольку у вас так много ошибок, похоже, у вас более системная проблема. Вы уверены, что у системы достаточно оперативной памяти? Не знаю, пробовали ли вы уже, но, возможно, стоит внимательнее изучить файл импорта и попытаться выяснить, есть ли что-то, что можно найти — может быть, вам просто нужно как-то настроить split_regex или загрузить файл на сервер в другом формате?
Если проблемы продолжатся, вы можете попросить помощи в канале Marketplace — здесь есть несколько консультантов, которые очень опытны в выполнении импортов. Я, конечно, не эксперт — это была моя первая попытка. ![]()
root@discourse:/var/discourse# ./launcher enter import
root@discourse-import:/var/www/discourse# RAILS_DB=secondsite
root@discourse-import:/var/www/discourse# export RAILS_DB
root@discourse-import:/var/www/discourse# import_mbox.sh
Импорт mbox начинается...
Загрузка существующих групп...
Загрузка существующих пользователей...
Загрузка существующих категорий...
Загрузка существующих постов...
Загрузка существующих тем...
создание индекса
индексирование файлов в /shared/import/data/list
индексирование /shared/import/data/list/18929486-3.mbox
индексирование /shared/import/data/list/18929486-2.mbox
индексирование ответов и пользователей
создание категорий
1 / 1 (100.0%) [4916421 элементов/мин]
создание пользователей
69 / 69 (100.0%) [1178 элементов/мин] ]
создание тем и постов
Дата отсутствует. Пропуск 0462b41b966d8c11e6e32cc14c0b576d
1 / 2333 ( 0.0%) [179689 элементов/мин] Дата отсутствует. Пропуск 0adb9bd80082595a33130f7749d7f530
2 / 2333 ( 0.1%) [224693 элементов/мин] Дата отсутствует. Пропуск 3bd86d7adb396fbeb7d6dfcfe9f0be5f
3 / 2333 ( 0.1%) [283328 элементов/мин] Дата отсутствует. Пропуск 4f5397838e6c7f96eedfe116ce27be13
4 / 2333 ( 0.2%) [184374 элементов/мин] Дата отсутствует. Пропуск c8c14ab80e92ae1cacd4af99351319bd
45 / 2333 ( 1.9%) [334 элементов/мин] Не удалось сопоставить пост для 2f401ce90708241252h30bdae5iad2ae0096e067b71@mail.gmail.com
undefined method `hex' for nil:NilClass
/var/www/discourse/app/models/upload.rb:132:in `base62_sha1'
/var/www/discourse/app/models/upload.rb:386:in `short_url_basename'
/var/www/discourse/app/models/upload.rb:115:in `short_url'
/var/www/discourse/lib/upload_markdown.rb:17:in `image_markdown'
/var/www/discourse/lib/upload_markdown.rb:10:in `to_markdown'
/var/www/discourse/lib/email/receiver.rb:1085:in `block in add_attachments'
/var/www/discourse/lib/email/receiver.rb:1060:in `each'
/var/www/discourse/lib/email/receiver.rb:1060:in `add_attachments'
/var/www/discourse/script/import_scripts/mbox/importer.rb:137:in `format_raw'
/var/www/discourse/script/import_scripts/mbox/importer.rb:121:in `map_post'
/var/www/discourse/script/import_scripts/mbox/importer.rb:145:in `map_first_post'
/var/www/discourse/script/import_scripts/mbox/importer.rb:103:in `block (2 levels) in import_posts'
/var/www/discourse/script/import_scripts/base.rb:491:in `block in create_posts'
/var/www/discourse/script/import_scripts/base.rb:490:in `each'
/var/www/discourse/script/import_scripts/base.rb:490:in `create_posts'
/var/www/discourse/script/import_scripts/mbox/importer.rb:97:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:870:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:869:in `loop'
/var/www/discourse/script/import_scripts/base.rb:869:in `batches'
/var/www/discourse/script/import_scripts/mbox/importer.rb:83:in `batches'
/var/www/discourse/script/import_scripts/mbox/importer.rb:91:in `import_posts'
/var/www/discourse/script/import_scripts/mbox/importer.rb:35:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
script/import_scripts/mbox.rb:16:in `<module:Mbox>'
script/import_scripts/mbox.rb:10:in `<module:ImportScripts>'
script/import_scripts/mbox.rb:9:in `<main>'
940 / 2333 ( 40.3%) [398 элементов/мин] Не удалось сопоставить пост для BBCAF42471FF9540868B4DC02B885B1BBCDA1F@wn1217.or.providence.org
undefined method `hex' for nil:NilClass
/var/www/discourse/app/models/upload.rb:132:in `base62_sha1'
/var/www/discourse/app/models/upload.rb:386:in `short_url_basename'
/var/www/discourse/app/models/upload.rb:115:in `short_url'
/var/www/discourse/lib/upload_markdown.rb:17:in `image_markdown'
/var/www/discourse/lib/upload_markdown.rb:10:in `to_markdown'
/var/www/discourse/lib/email/receiver.rb:1085:in `block in add_attachments'
/var/www/discourse/lib/email/receiver.rb:1060:in `each'
/var/www/discourse/lib/email/receiver.rb:1060:in `add_attachments'
/var/www/discourse/script/import_scripts/mbox/importer.rb:137:in `format_raw'
/var/www/discourse/script/import_scripts/mbox/importer.rb:121:in `map_post'
/var/www/discourse/script/import_scripts/mbox/importer.rb:159:in `map_reply'
/var/www/discourse/script/import_scripts/mbox/importer.rb:105:in `block (2 levels) in import_posts'
/var/www/discourse/script/import_scripts/base.rb:491:in `block in create_posts'
/var/www/discourse/script/import_scripts/base.rb:490:in `each'
/var/www/discourse/script/import_scripts/base.rb:490:in `create_posts'
/var/www/discourse/script/import_scripts/mbox/importer.rb:97:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:870:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:869:in `loop'
/var/www/discourse/script/import_scripts/base.rb:869:in `batches'
/var/www/discourse/script/import_scripts/mbox/importer.rb:83:in `batches'
/var/www/discourse/script/import_scripts/mbox/importer.rb:91:in `import_posts'
/var/www/discourse/script/import_scripts/mbox/importer.rb:35:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
script/import_scripts/mbox.rb:16:in `<module:Mbox>'
script/import_scripts/mbox.rb:10:in `<module:ImportScripts>'
script/import_scripts/mbox.rb:9:in `<main>'
944 / 2333 ( 40.5%) [399 элементов/мин] Не удалось сопоставить пост для 3A1D6C799D451B41BD0500303339622A023AA1@s-mail.integral-corp.com
undefined method `hex' for nil:NilClass
/var/www/discourse/app/models/upload.rb:132:in `base62_sha1'
/var/www/discourse/app/models/upload.rb:386:in `short_url_basename'
/var/www/discourse/app/models/upload.rb:115:in `short_url'
/var/www/discourse/lib/upload_markdown.rb:17:in `image_markdown'
/var/www/discourse/lib/upload_markdown.rb:10:in `to_markdown'
/var/www/discourse/lib/email/receiver.rb:1085:in `block in add_attachments'
/var/www/discourse/lib/email/receiver.rb:1060:in `each'
/var/www/discourse/lib/email/receiver.rb:1060:in `add_attachments'
/var/www/discourse/script/import_scripts/mbox/importer.rb:137:in `format_raw'
/var/www/discourse/script/import_scripts/mbox/importer.rb:121:in `map_post'
/var/www/discourse/script/import_scripts/mbox/importer.rb:159:in `map_reply'
/var/www/discourse/script/import_scripts/mbox/importer.rb:105:in `block (2 levels) in import_posts'
/var/www/discourse/script/import_scripts/base.rb:491:in `block in create_posts'
/var/www/discourse/script/import_scripts/base.rb:490:in `each'
/var/www/discourse/script/import_scripts/base.rb:490:in `create_posts'
/var/www/discourse/script/import_scripts/mbox/importer.rb:97:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:870:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:869:in `loop'
/var/www/discourse/script/import_scripts/base.rb:869:in `batches'
/var/www/discourse/script/import_scripts/mbox/importer.rb:83:in `batches'
/var/www/discourse/script/import_scripts/mbox/importer.rb:91:in `import_posts'
/var/www/discourse/script/import_scripts/mbox/importer.rb:35:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
script/import_scripts/mbox.rb:16:in `<module:Mbox>'
script/import_scripts/mbox.rb:10:in `<module:ImportScripts>'
script/import_scripts/mbox.rb:9:in `<main>'
1149 / 2333 ( 49.2%) [408 элементов/мин] Не удалось сопоставить пост для FF35EE5B30156244A4370DC859B7F650F50626@s-mail.integral-corp.com
undefined method `hex' for nil:NilClass
/var/www/discourse/app/models/upload.rb:132:in `base62_sha1'
/var/www/discourse/app/models/upload.rb:386:in `short_url_basename'
/var/www/discourse/app/models/upload.rb:115:in `short_url'
/var/www/discourse/lib/upload_markdown.rb:17:in `image_markdown'
/var/www/discourse/lib/upload_markdown.rb:10:in `to_markdown'
/var/www/discourse/lib/email/receiver.rb:1085:in `block in add_attachments'
/var/www/discourse/lib/email/receiver.rb:1060:in `each'
/var/www/discourse/lib/email/receiver.rb:1060:in `add_attachments'
/var/www/discourse/script/import_scripts/mbox/importer.rb:137:in `format_raw'
/var/www/discourse/script/import_scripts/mbox/importer.rb:121:in `map_post'
/var/www/discourse/script/import_scripts/mbox/importer.rb:159:in `map_reply'
/var/www/discourse/script/import_scripts/mbox/importer.rb:105:in `block (2 levels) in import_posts'
/var/www/discourse/script/import_scripts/base.rb:491:in `block in create_posts'
/var/www/discourse/script/import_scripts/base.rb:490:in `each'
/var/www/discourse/script/import_scripts/base.rb:490:in `create_posts'
/var/www/discourse/script/import_scripts/mbox/importer.rb:97:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:870:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:869:in `loop'
/var/www/discourse/script/import_scripts/base.rb:869:in `batches'
/var/www/discourse/script/import_scripts/mbox/importer.rb:83:in `batches'
/var/www/discourse/script/import_scripts/mbox/importer.rb:91:in `import_posts'
/var/www/discourse/script/import_scripts/mbox/importer.rb:35:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
script/import_scripts/mbox.rb:16:in `<module:Mbox>'
script/import_scripts/mbox.rb:10:in `<module:ImportScripts>'
script/import_scripts/mbox.rb:9:in `<main>'
2328 / 2333 ( 99.8%) [467 элементов/мин]
Обновление статуса тем
Обновление bumped_at для тем
Обновление last posted at для пользователей
Обновление last seen at для пользователей
Обновление количества ответов в темах...
70 / 70 (100.0%) [10745 элементов/мин]
Обновление first_post_created_at...
Обновление user post_count...
Обновление user topic_count...
Обновление пользователей тем
Обновление таймингов постов
Обновление пользователей избранных тем
Обновление избранных тем в категориях
9 / 9 (100.0%) [2505 элементов/мин] n]
Обновление количества ответов в темах для пользователей
70 / 70 (100.0%) [9174 элементов/мин] ]
Сброс счетчиков тем
Готово (00ч 06мин 58сек)
Итак, я позволил процессу продолжиться (разберусь с ошибками позже), но теперь столкнулся с довольно необычной ситуацией. Я попытался импортировать эти данные в папку с именем «old-yahoo-group», предварительно создав в системе соответствующую КАТЕГОРИЮ, а затем переместил все mbox-папки в следующую директорию:
/var/discourse/shared/standalone/import/data/old-yahoo-group
Мне казалось, что я правильно понял инструкции: после импорта сообщения должны были отобразиться в соответствующей категории, однако они все скрыты в системе.
Я могу выполнить поиск и найти старые сообщения без проблем, но они не отображаются ни в одном сводном разделе.
Как можно настроить этот последний импорт так, чтобы все сообщения (около 35 тысяч) попали в заданную категорию и отображались в удобном разделе, указывающем, что это старые сообщения?
При дальнейшем изучении я, кажется, выяснил, что произошло:
Теперь мне нужно понять, как исправить сложившуюся ситуацию…
Вот что сработало идеально (при условии, что категория old-yahoo-group уже была создана, не существовало других постов без категории, и она фактически была отключена в настройках):
/var/discourse/launcher enter app
rails c
un=Category.find_by_slug('uncategorized')
newcat=Category.find_by_slug('old-yahoo-group')
Topic.where(category_id: un.id).update_all(category_id: newcat.id)
Кстати, у меня был похожий опыт. По какой-то причине скрипт импорта проигнорировал созданную мной категорию, хотя slug совпадал. Однако он создал новую категорию, так что у меня не возникло проблем. Я просто удалил созданную мной категорию и переименовал категорию, созданную скриптом.