Решение буквально находится в посте выше вашего. ![]()
Нам нужно исправить скрипт. Может быть, вы сможете создать PR, который решит проблему для всех?
Решение буквально находится в посте выше вашего. ![]()
Нам нужно исправить скрипт. Может быть, вы сможете создать PR, который решит проблему для всех?
Спасибо, это помогло, извините за ошибку. В искупление своей неспособности читать я открыл Added duplication to name to prevent modification of frozen string exception by adam-skalicky · Pull Request #30325 · discourse/discourse · GitHub, чтобы избавить других от стыда задавать глупые вопросы.
Делает ли этот скрипт импорта так, чтобы Discourse воспроизводил потоковую структуру электронной почты Mailman 2 (например, используя маленькую стрелку Discourse для обозначения «В ответ на»), или всё идёт чисто хронологически (для каждого потока на основе Message-ID, In-Reply-To и References)?
Да, это так
Круто. Довольно много писем из моего списка рассылки не содержат заголовков In-Reply-To и References, которые должны быть, из-за чего они могут импортироваться как новые темы, а не просто как ответы. Насколько я помню, скрипт использует эти заголовки или заголовки темы (но не оба сразу).
Кажется, я уже спрашивал об этом в далёком прошлом, но есть ли какие-то автоматические способы добавить эти заголовки в файл MBOX и/или иначе перегруппировать письма до или после импорта в Discourse?
Теперь можно объединять темы и сохранять хронологический порядок, так что, возможно, это и есть решение. Им просто будет не хватать маленькой стрелочки Discourse, указывающей, на какое сообщение был дан ответ.
Скрипт импорта mbox состоит из двух этапов. Первый — индексация, в результате которой создается база данных SQLite. Вы можете либо изменить данные в SQLite перед импортом, либо отредактировать сам Ruby-скрипт.
Вся магия сортировки и группировки по теме или заголовкам происходит здесь:
Если вы знаете, как именно хотите группировать письма, вы можете добавить собственную логику группировки.
Мне ещё долго не придётся даже задумываться о чём-то столь сложном!
На https://bazaar.launchpad.net/~mailman-coders/mailman/2.1/view/head:/Mailman/Archiver/pipermail.py#L669 видно, что Pipermail в Mailman 2 ищет следующее в порядке предпочтения:
Такая комбинация подходов кажется идеальной. В третьем случае, возможно, имеет смысл, чтобы Discourse не использовал стрелку «в ответ на».
Насколько я помню, Hyperkitty в Mailman 3 вообще не учитывала тему, что было не так хорошо.
Прошу прощения за вмешательство и, возможно, глупый вопрос, но я не смог найти здесь чёткого ответа. Мне бы хотелось узнать, создаёт ли процесс импорта нового пользователя Discourse для каждого адреса электронной почты (конечно, с исключением дубликатов), или же все они попадают в систему как один пользователь. У меня есть рассылка с 20-летней историей сообщений, и она довольно большая, поэтому экспериментировать с ней сложно. Также, как обстоят дела с ответами в исходной рассылке? Сохраняется ли их древовидная структура?
Да, пользователи создаются — по одному на адрес электронной почты.
Я смог сделать Google Takeout для моих групп Google, загрузить файлы .mbox и импортировать их.
Эти шаги помогли сопоставить data/folder с существующей категорией, но это нужно выполнять в контейнере import, а не в контейнере app, как указано в этой статье: ссылка:
./launcher enter import
rails c
# Используйте ID категории, отображаемый в URL, например
# это 16, если путь к категории выглядит так: /c/soccer/16
category = Category.find(16)
# Используйте имя директории, где хранятся файлы mbox. Например,
# если файлы хранятся в import/data/foo, в качестве имени директории следует использовать "foo".
category.custom_fields["import_id"] = "soccer"
category.save!
У меня уже есть пользователи в Discourse, которые перешли самостоятельно, поэтому скрипт импорта не смог создать контакты для них (вероятно, это не проблема), но импортированные сообщения, в которых участвовали эти существующие пользователи Discourse, показывают отправителя как system вместо их имени.
Есть ли способ сопоставить существующих пользователей с их импортированными сообщениями?
Пока я отменил всё, восстановившись из недавней резервной копии. Готов попробовать снова с рекомендациями по работе с существующими пользователями Discourse и их импортированными сообщениями.
Обновление:
Claude помог решить задачу сопоставления существующих пользователей. Необходимо запустить этот цикл в консоли rails в дополнение к вышеуказанному коду:
User.where("id > 0").find_each do |u|
email = u.email.downcase
unless u.custom_fields["import_id"].present?
u.custom_fields["import_id"] = email
u.save_custom_fields
end
end