Спасибо за это руководство и скрипт импорта! Я успешно использовал его с группой Google, применяя Google Takeout. Я просто поместил файл .mbox в нужную директорию и запустил скрипт.
У меня возник вопрос об импорте писем, у которых есть родительские сообщения, отсутствующие в .mbox. Например, во многих темах нашей группы обсуждения начинаются с пересланного письма, которое не было отправлено в группу, или группа добавляется в список получателей ответа в середине беседы, чтобы вовлечь её в обсуждение.
В настоящее время при импорте кажется, что предыдущие письма отсутствуют. Их можно найти, если нажать на значок письма и просмотреть HTML-код. Мне интересно, сталкивался ли кто-то ещё с подобной ситуацией и есть ли какие-либо решения. Я мог бы представить либо включение всей предыдущей цепочки писем в пост, либо попытку её разобрать, извлечь несколько сообщений и добавить все их.
Вам потребуется найти способ сгенерировать эти сообщения из цитируемого текста и добавить их в файл mbox (вероятно, с заголовками Id), прежде чем запускать скрипт импорта.
Это действительно отлично. Однако у меня возникли проблемы с некоторыми письмами, поступающими в Discourse: в одном посте сначала идет исходное письмо, а затем ответы в формате mbox, которые не отформатированы. Не уверен, что именно вызывает это.
Вопрос в том, как удалить все импортированные письма (за 20 лет), не удаляя и не создавая заново целевой экземпляр Discourse?
Я знаю, что рекомендуемый объем оперативной памяти составляет 8 ГБ. Я пробовал импортировать 20 лет постов на виртуальную машину с 2 ГБ памяти: она работала какое-то время, а затем упала с сообщением «killed». Машины с 8 ГБ у хостинг-провайдеров, таких как DigitalOcean, дороги (для меня). Есть ли способ сделать это с меньшим объемом памяти? Например, импортировать меньшими порциями?
Может быть, удалить эти категории, а затем удалить связанные с ними пользовательские поля тем.
Нет, я не думаю, что на небольшом сервере можно провести значительный импорт. Можно попробовать на рабочем столе, но тогда возникнут проблемы с пропускной способностью для возврата базы данных в интернет.
Я знаю, что активность в этой теме невелика, но мне не удаётся заставить всё работать правильно. Многие импортируемые письма в формате mbox не разделяются корректно. Строки From выглядят так:
From MAILER-DAEMON Tue Nov 01 05:57:09 2022
Однако в некоторых сообщениях после корректного импорта внутри тела письма встречаются необработанные элементы в формате mbox, начинающиеся с типичной строки From. Другими словами, они не разделяются. Я не вижу необходимости изменять регулярное выражение, отвечающее за разделение, а так как я не знаю Ruby, не могу отладить скрипт импорта.
Я не понимаю, как действовать дальше. Нужно импортировать 20 лет переписки, поэтому вручную исправлять каждое импортированное сообщение невозможно. Короче говоря, этот скрипт для меня не работает. Почему это происходит только со мной?
Вы не одиноки. Моя первая оплачиваемая работа в Discourse заключалась в том, чтобы месяцами чистить старые файлы mbox, которые каким-то образом редактировались вручную, хотя я уже не помню зачем.
Похоже, вам действительно нужно поработать с регулярными выражениями или найти другой способ исправить некорректные сообщения. Один из вариантов — использовать другой инструмент для разделения сообщений на отдельные файлы.
Кстати, я написал несколько скриптов импорта ещё до того, как выучил Ruby.
Каждый импорт уникален. При наличии 20 лет данных вполне вероятно, что у вас возникнет несколько разных проблем, так как в различных используемых системах со временем всё менялось.
Я хочу импортировать 20 лет сообщений из моей системы Mailman2 в архивную директорию, но не хочу создавать для них идентификаторы пользователей (даже временные), так как многие наши подписчики ушли из жизни или больше не с нами, и это привело бы к созданию множества учётных записей, которые лишь займут место.
Могу ли я импортировать их все под одним идентификатором пользователя (например, ‘archive’)?
И это может быть глупый вопрос, но поскольку приложение отключено во время процесса импорта, означает ли это, что пользователи, подписавшиеся на уведомления о новых сообщениях, не получат спам от всех только что загруженных архивов?
Вы можете закомментировать функцию import_users, и все сообщения будут принадлежать системе.
Вы не сэкономите много места.
Ни один пользователь не получит электронное письмо, пока не воспользуется процессом восстановления пароля для входа в свою учетную запись. Если вы импортируете эти данные в существующее сообщество, то, полагаю, пользователи получат уведомления о новых сообщениях, созданных скриптом импорта.
Спасибо, я просмотрел скрипт импорта и подумал, что, возможно, смогу просто отключить раздел новых пользователей. Проверка этого уже включена в мой список задач.
Дело не в месте на диске, которое я имею в виду, а в том, что у нас может оказаться сотни подготовленных учётных записей, которые никогда не будут использованы, поэтому это скорее вопрос ментального пространства или очень длинного списка пользователей.
Вы знаете своих пользователей, но наличие аккаунтов, которыми никто не будет пользоваться, кажется гораздо лучше, чем не знать, кто писал сообщения в течение 20 лет.
Я не могу найти файл import_mbox.sh, а при попытке запустить скрипт mbox.rb напрямую получаю множество ошибок Ruby:
root@lists-import:/var/www/discourse/script/import_scripts# ruby mbox.rb mbox
fatal: обнаружена сомнительная принадлежность репозитория в ‘/var/www/discourse’
Чтобы добавить исключение для этой директории, выполните:
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/zeitwerk-2.6.7/lib/zeitwerk/loader/callbacks.rb:25:in `on_file_autoloaded’: ожидалось, что файл /var/www/discourse/lib/freedom_patches/pluck_first.rb определит константу FreedomPatches::PluckFirst, но этого не произошло (Zeitwerk::NameError)
Приветствую, друзья. Какая замечательная инструкция. Спасибо Герхарду и другим за вклад.
Кто-нибудь из вас адаптировал это для Lyris? Я планирую миграцию исторической установки и хотел бы понять, столкнулись ли они с какими-либо особыми проблемами в аналогичном проекте.
Чтобы быть более конкретным, я успешно модифицировал код, который позволил импорт, добавив .dup в строке 447 файла /var/www/discourse/script/import_scripts/base.rb:
params[:name].dup.strip!
Один момент остаётся неясным: как я могу импортировать данные в один из сайтов мульти-сайта?
У кого-нибудь возникала ошибка «can’t modify frozen String»? Мой файл index.db создается без проблем, но процесс падает при создании категорий.
root@xxxxxxxxxx:/var/www/discourse# import_mbox.sh
Начинается импорт mbox...
Загрузка существующих групп...
Загрузка существующих пользователей...
Загрузка существующих категорий...
Загрузка существующих сообщений...
Загрузка существующих тем...
создание индекса
индексирование файлов в /shared/import/data/xxxxx-xxxxxxx@xxxxxxx.com
индексирование /shared/import/data/xxxxx-xxxxxxx@xxxxxxx.com/export.mbox
индексирование ответов и пользователей
создание категорий
/var/www/discourse/script/import_scripts/base.rb:447:in `strip!': **can't modify frozen String: "xxxxx-xxxxxxx@xxxxxxx.com" (****FrozenError****)**
из /var/www/discourse/script/import_scripts/base.rb:447:in `block in create_categories'
из /var/www/discourse/script/import_scripts/base.rb:438:in `each'
из /var/www/discourse/script/import_scripts/base.rb:438:in `create_categories'
из /var/www/discourse/script/import_scripts/mbox/importer.rb:50:in `import_categories'
из /var/www/discourse/script/import_scripts/mbox/importer.rb:34:in `execute'
из /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
из script/import_scripts/mbox.rb:13:in `\u003cmodule:Mbox\u003e'
из script/import_scripts/mbox.rb:11:in `\u003cmodule:ImportScripts\u003e'
из script/import_scripts/mbox.rb:10:in `\u003cmain\u003e'