@gerhard: Могу ли я выполнить очистку некорректных кодировок символов после миграции с помощью Sidekiq? Я очень новичок в Discourse, поэтому, возможно, не до конца понимаю, как это работает.
Или, может быть, лучше использовать SQL-скрипт напрямую в MariaDB?
Конечно! Вы также можете просто отредактировать каждый пост вручную. В 10 раз проще сделать это заранее, когда есть возможность начать всё сначала.
Я перепробовал множество способов исправить кодировку на стороне MariaDB, но так и не нашёл решения. Вот код, который я использовал для исправления кодировки при импорте, над которым сейчас работаю.
### Кодировка WIN1252
win_encoded = ''
begin
win_encoded = raw.force_encoding('utf-8').encode("Windows-1252",
invalid: :replace, undef: :replace, replace: ""
).force_encoding('utf-8').scrub
rescue => e
puts "\n#{'-'*50}\nWin1252 не удался для \n\n#{raw}\n\n"
win_encoded = ''
end
Это был болезненный опыт. Я пробовал несколько кодировок и включил их несколько в пост, чтобы мог их сравнить. Эта, похоже, решила большинство проблем в большинстве случаев. Мне потребовалось гораздо больше времени, чем хотелось бы, чтобы разобраться с .scrub, так как без него я получал строки, которые больше нельзя было обработать с помощью gsub.
У кого-то уже есть хорошее решение для импорта вложенных списков из phpBB?
Я недостаточно хорошо знаю Ruby, чтобы понять, как к этому подступиться — сижу над этим:
def process_lists(text)
# convert list tags to ul and list=1 tags to ol
# list=a is not supported, so handle it like list=1
# list=9 and list=x have the same result as list=1 and list=a
text.gsub!(/\[list\](.*?)\[\/list:u\]/mi) do
$1.gsub(/\[\*\](.*?)\[\/\*(:m)?\]\n*/mi) { "* #{$1}\n" }
end
text.gsub!(/\[list=.*?\](.*?)\[\/list:o\]/mi) do
$1.gsub(/\[\*\](.*?)\[\/\*(:m)?\]\n*/mi) { "1. #{$1}\n" }
end
end
У кого-то есть идея, как может выглядеть «циклирование» по вложенному списку?
Я пока не смотрел, но посмотрю, спасибо. Хотя я стараюсь избегать его использования, так как не хочу в долгосрочной перспективе поддерживать дополнительные BB-теги — мне гораздо удобнее конвертировать всё при импорте. Вложенные списки не являются критичной проблемой, но было бы здорово их иметь.
Вы можете создать резервную копию, обновиться до phpBB 3.2 и использовать мою экспериментальную ветку. Она обеспечивает значительно лучшую поддержку BBCodes.
Это звучит интересно, но я бы не хотел больше возиться с phpBB. Помимо списков, процесс импорта уже в значительной степени автоматизирован. Это, пожалуй, отбросило бы нас назад и потребовало бы дополнительной работы и тестирования. Но приятно видеть, что прогресс в версии 3.2 движется успешно.
Да, мы уже месяц боремся с подобными проблемами, мигрируя устаревший форум vB3 с почти двадцатилетней историей самых разных причудливых применений BBCode: вложенности, встраивания и так далее.
Довести такую миграцию до 99,9% идеальности — задача нетривиальная. Например, мы написали код на Ruby, чтобы удалять все BB-теги из наших блоков кода, так как Markdown «не любит» BBCode внутри блоков с ограничителями.
С нашей стороны мы всё ещё завершаем множество процедур предварительной обработки на Ruby, и мы всё ближе и ближе к цели, но мы никогда не достигнем «идеала» или «100%» при миграции почти двадцатилетних постов от очень креативных пользователей BBCode (не говоря уже о тех, кто просто копировал и вставлял текст в посты и так далее…)
Мы всё ещё работаем над устранением проблем, связанных с конвертацией BBCode в Markdown.
Иногда мне хочется просто «выкинуть всё это прочь»… LOL
Похоже, у нас всё ещё возникают проблемы с изменением имён пользователей или их полным отсутствием при импорте, если они содержат специальные символы.
Есть ли известные проблемы с импортером, или я неправильно настроил опцию поддержки юникодных имён пользователей в Discourse? Я её включил, но белый список всё ещё содержит умлауты. Нужно ли мне удалить белый список, чтобы разрешить все символы юникода, или же мне нужно перечислить все символы вручную? Мне казалось, что включение поддержки юникода разрешает все символы юникода, а отключение — разрешает только те, что указаны в белом списке.
При импорте некоторые символы, например @ или *, заменяются на _ — я могу понять, почему @ может вызывать проблемы с упоминаниями (@mention), но… Я просто хотел убедиться, прежде чем вручную обрабатывать всех этих пользователей перед импортом (что было бы большой головной болью).
Прежде всего, спасибо за всю документацию и помощь в этой теме.
Я только что импортировал старый форум phpBB3 в совершенно новый Discourse.
Всё прошло довольно гладко с 200 тысячами сообщений и 20 тысячами вложений, но Sidekiq немного затруднялся с обработкой всего после импорта.
Теперь я столкнулся с новой проблемой: изображения, которые были вложены в теги ссылок, выглядят следующим образом: [url=http://www.casimages.com][img]http://nsm01.casimages.com/img/2009/04/24//090424092900546293539010.jpg[/img][/url]
После импорта (преобразования bbcode в markdown) эти изображения отображаются просто как ссылки: [nsm01.casimages.com/img/2009/04/24//090424092900546293539010.jpg](http://www.casimages.com)
Есть ли способ обработать/перекомпилировать эти ссылки так, чтобы они отображались как изображения и автоматически загружались в S3?
Спасибо, Джей. Да, я уже включил настройку «загружать удалённые». Моя проблема в том, что эти изображения отображаются как ссылки (и URL изображения — это лишь «отображаемая часть» ссылки, а целевой адрес не соответствует содержимому изображения).
У меня сейчас есть форум, импортированный из phpBB.
Я думаю о том, чтобы импортировать ещё один форум phpBB (36 000 сообщений, 230 участников) в мою существующую установку Discourse. У них есть общие категории и пользователи.
Учётные записи пользователей можно будет объединить вручную.
Что касается сообщений, то после импорта их можно будет вручную переместить в существующие категории.
Сработает ли это «из коробки» с помощью скрипта импорта или всё превратится в хаос?
Что произойдёт, если я импортирую форум phpBB, и некоторые адреса электронной почты пользователей уже существуют в моём текущем Discourse?
Спасибо за эту ценную информацию, о которой я не подумал
Да, я сделаю это и попробую на тестовом сервере, чтобы проверить, как это можно реализовать.
О контексте:
Я хосту национальный форум Discourse о велосипедном спорте (с одним колесом).
Также я хосту форум phpBB для местной ассоциации велосипедистов.
Оба форума имеют общих пользователей, а некоторые темы или обсуждаемые вопросы дублируются. Идея заключается в том, чтобы объединить форум местной ассоциации с национальным форумом, чтобы устранить дублирование тем, и создать группу или категорию для тем, связанных с местной ассоциацией.
Кроме того, пользователи, которые находятся только на форуме местной ассоциации, присоединятся к национальному форуму, и это, возможно, повысит активность.
У кого-нибудь есть идея, почему MySQL не запускается в контейнере импорта?
Я уже провёл несколько запусков, и всё всегда работало, но теперь получаю:
Can't connect to local MySQL server through topic:30810
Как только я пытаюсь запустить импорт. Перепроверил всё несколько раз, несколько раз пересобрал контейнер импорта. Всё на месте, но MySQL, похоже, не запущен.
Я немного в ужасе, ведь это наш реальный переход на Discourse сегодня.