Думаю, что предложенные вами изменения, скорее всего, не сломают другие импорты. Часто есть набор подобных изменений, а затем множество других, специфичных для конкретного импорта. Определить, какие из них какие, и протестировать только их — это большая работа, поэтому PR часто не создаётся.
Спасибо за информацию, Джей. Я сделаю PR позже, после завершения миграции, если это поможет создать ещё более совершенный инструмент миграции phpBB3.
Текущий скрипт также игнорирует теги [size=XXX], с которыми я сталкивался при других миграциях.
При моей текущей миграции я быстро написал скрипт в импортере и использовал значение XXX, чтобы заменить эти теги на <small>content</small> и <big>content</big>, так как они поддерживаются в Discourse.
Но это было моим личным пожеланием, и, возможно, более правильным решением (в общем смысле) было бы просто избавиться от этих тегов [size], как это уже делает скрипт импорта с тегами [color].
Спасибо @Canapin за всю вашу обратную связь. PR определенно приветствуется!
Также небольшой тизер: мы работаем над решением, которое должно сделать все импорты — не только phpBB — намного лучше, быстрее, проще в настройке и избавит от назойливых проблем с конвертацией BBCode…
При импорте моих постов возникло множество таких ошибок (не для всех постов):
251491 / 251672 ( 99.9%) [14140 items/min] Исключение при создании поста 354629. Пропуск.
undefined method `[]' for nil:NilClass
/var/www/discourse/script/import_scripts/phpbb3/importers/post_importer.rb:66:in `block in map_first_post'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/core_ext/object/try.rb:15:in `public_send'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/core_ext/object/try.rb:15:in `try'
/var/www/discourse/script/import_scripts/base.rb:576:in `create_post'
/var/www/discourse/script/import_scripts/base.rb:523:in `block in create_posts'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/script/import_scripts/base.rb:510:in `create_posts'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:192:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:874:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:873:in `loop'
/var/www/discourse/script/import_scripts/base.rb:873:in `batches'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:254:in `batches'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:188:in `import_posts'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:38:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:22:in `perform'
script/import_scripts/phpbb3.rb:33:in `<module:PhpBB3>'
script/import_scripts/phpbb3.rb:14:in `<module:ImportScripts>'
script/import_scripts/phpbb3.rb:13:in `<main>'
Но я не смог понять, что вызывает эту ошибку.
Есть какие-нибудь идеи?
Как я могу проверить, действительно ли отсутствует пост? Не смог найти способ вывести данные (например, содержимое поста), соответствующие сообщению «Исключение при создании поста 354629».
Не помню, чтобы сталкивался с этой ошибкой при предыдущих тестах импорта в прошлые дни, но возможно, я просто не обратил на это внимание… Может ли это быть связано с этой известной проблемой?
251490 / 251672 ( 99.9%) [14140 items/min] Родительский пост 337703 не существует. Пропуск 354628: vw-camper est malade !?
Я запустил скрипт импорта дважды, как и положено, в отношении этой конкретной проблемы.
Чувствую себя глупо! Я даже думал об этом, но был так уверен, что раньше не сталкивался с этой ошибкой, что даже не попробовал…
Проблема решена, большое спасибо.
Предполагаю, что сейчас вы не можете много рассказать, но есть ли какие-то подсказки о том, как это будет работать и когда появятся рабочие скрипты импорта, использующие эту новую систему?
Возможно, я перенесу ещё один phpBB в этом году, поэтому мне было бы очень интересно узнать чуть больше.
Привет! Я тестирую миграцию phpBB 3.2 на Discourse для форума среднего размера (30 тыс. тем / 600 тыс. сообщений). Почти всё работает отлично, за исключением нескольких тем, которые не импортировались (ошибка: «Родительский пост xx не существует»). Проблема не решается при повторных запусках, но это не критично.
Моя главная проблема заключается в том, что последующие импорты свежих данных (подтверждённых контрольной суммой sha256sum в файле import/mysql/imported) не добавляют новые сообщения в Discourse. На раннем этапе процесса возникает исключение, не знаю, связано ли это с проблемой:
Не удалось сопоставить сообщение с ID 6815
Значение BIGINT UNSIGNED выходит за допустимые пределы в выражении '(`phpbb_prod`.`o`.`poll_option_total` - (select count(distinct `phpbb_prod`.`v`.`vote_user_id`) from `phpbb_prod`.`phpbb3_poll_votes` `v` join `phpbb_prod`.`phpbb3_users` `u` join `phpbb_prod`.`phpbb3_topics` `t` where ((`phpbb_prod`.`u`.`user_id` = `phpbb_prod`.`v`.`vote_user_id`) and (`phpbb_prod`.`v`.`topic_id` = `phpbb_prod`.`t`.`topic_id`) and (`phpbb_prod`.`v`.`poll_option_id` = `phpbb_prod`.`o`.`poll_option_id`) and (`phpbb_prod`.`t`.`topic_id` = `phpbb_prod
Это проблема с встроенными опросами в сообщениях, судя по выводу SQL?
Опросы существуют с самого начала работы форума. В то время я не руководил им, но, насколько я помню, анонимным пользователям никогда не разрешалось публиковать сообщения или отвечать на опросы.
С помощью
SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';
Я смог получить все голоса в опросах, и в двух из них обнаружил отрицательные значения поля “anonymous_votes”. Похоже, что этот форум всё-таки как-то позволял анонимное голосование
Спасибо @gerhard за подсказку, я покопаюсь поглубже…
Я сейчас изучаю возможность миграции форума phpBB на Discourse. Проблема в том, что наш phpBB использует PostgreSQL вместо MySQL, поэтому я хотел бы адаптировать скрипт для работы и с ним.
Мог бы кто-нибудь дать несколько советов по лучшему подходу к этому? В идеале я хочу, чтобы все могли воспользоваться результатами этой работы, поэтому предпочел бы использовать подход, принятый upstream-разработчиками, а не просто быстро и грязно «накодить» решение.
Насколько я понимаю, это в основном вопрос добавления правильных SQL-инструкций для схемы PostgreSQL с использованием подходящего адаптера базы данных. Однако я не уверен, как нужно адаптировать весь процесс оркестрации для контейнера Docker, чтобы правильно запустить экземпляр PostgreSQL (если это требуется в зависимости от типа БД, указанного в конфигурации), импортировать дамп базы данных и выполнить инструкции.
Однако, я не думаю, что он использовался недавно, поэтому, вероятно, он сломан и может не работать с текущими версиями phpBB, так как изменился формат хранения Markdown.
Какой бы путь вы ни выбрали, я бы не стал тратить слишком много времени на «полировку» вашего решения, если только вы этого действительно не хотите. Текущие скрипты импорта будут устаревшими в течение этого года…
Спасибо, я об этом не знал! И спасибо за предупреждение о том, что скрипты будут устаревать. Значит, вероятно, не стоит включать такую крупную функцию в основную ветку для тех, кто всё равно скоро откажется от них? Планируется ли какая-то замена для них?
Ещё один важный вопрос: достаточно ли установить только disable_edit_notifications, чтобы гарантировать, что ни один импортированный пользователь не получит письмо от Discourse в связи с импортируемыми данными? Поскольку сейчас инстанс не является публичным, и мы просто экспериментируем с импортом, возможно, потребуется несколько попыток, прежде чем всё будет готово, я хочу избежать отправки любых писем.