У меня была такая же ошибка. Я полагаю, она возникает, когда файл shared/standalone/import/mysql/imported устарел. Удаление этого файла устранило ошибку.
После импорта я выполнил ./launcher rebuild app. Импорт, кажется, прошёл полностью, за исключением того, что я не могу войти с паролем из phpBB. Я не заметил никаких соответствующих сообщений об ошибках во время импорта, а длина пароля составляет 20 символов, так что он должен превышать минимальный лимит длины.
На что мне стоит обратить внимание для устранения неполадок?
Чуть больше информации: в таблице user_custom_fields базы данных я вижу записи import_pass, которые соответствуют хешам паролей из базы данных phpBB, так что эта часть, похоже, сработала?
Редактирование: О, я понял, что произошло. Я совершенно забыл, что мы перешли на аутентификацию через LDAP для phpBB… Пароли, которые я импортировал, были вполне корректными, просто им уже 15 лет! Теперь мне нужно что-то придумать, чтобы извлечь хеши паролей из LDAP…
Сначала я подумал, что проблема в устаревшей версии phpBB 3.0.12, поэтому обновил phpBB до версии 3.0.14, очистил Discourse и папку uploads, и попытался импортировать снова. Безрезультатно.
Затем я обновил версию phpBB до 3.2.0 (после запуска их инструмента поддержки для очистки базы данных от модов) на тестовом сервере, но всё равно ничего не вышло.
Прежде чем углубляться в исследование моей базы данных, я хотел убедиться, что скрипт работает у всех.
Я не думаю, что допустил ошибку в файле настроек, но, возможно, свежий взгляд на него поможет.
# Это пример файла настроек для импортера phpBB3.
database:
type: MySQL # на данный момент поддерживается только MySQL
host: localhost
port: 3306
username: root
password:
schema: phpbb
table_prefix: phpbb_ # Измените это, если ваш форум использует другой префикс. Обычно все имена таблиц начинаются с phpbb_
batch_size: 1000 # Не меняйте это, если не знаете, что делаете. Значение по умолчанию (1000) должно работать отлично.
import:
# Установите это, если вы импортируете несколько форумов phpBB в один форум Discourse.
#
# Например, при импорте нескольких сайтов добавьте префикс 'first' ко всем
# импортируемым ID, чтобы избежать конфликтов. Последующие запуски импорта
# должны иметь другое значение 'site_name'.
#
# site_name: first
#
site_name:
# Создание новых категорий
#
# Например, для создания родительской категории и подкатегории.
#
# new_categories:
# - forum_id: foo
# name: Категория Foo
# - forum_id: bar
# name: Категория Bar
# parent_id: foo
#
new_categories: []
# Сопоставление категорий
#
# Например, темы из категорий phpBB 1 и 2 будут импортированы
# в новую категорию "Категория Foo", темы из категории phpBB 3
# будут импортированы в подкатегорию "Категория Bar", темы из категории phpBB
# 4 будут объединены с категорией 5, а категория 6 будет пропущена.
#
# category_mappings:
# 1: foo
# 2: foo
# 3: bar
# 4: 5
# 6: SKIP
#
category_mappings: {}
# Сопоставление тегов
#
# Например, импортированные темы из категории phpBB 1 будут помечены
# тегом 'first-category' и т.д.
#
# tag_mappings:
# 1:
# - first-category
# 2:
# - second-category
# 3:
# - third-category
#
tag_mappings:
# Сопоставление рангов и уровней доверия
#
# Сопоставьте уровни рангов phpBB 3.x с уровнями доверия
# Пользователи с рангом не менее 3000 получат TL3 и т.д.
#
# rank_mapping:
# trust_level_1: 200
# trust_level_2: 1000
# trust_level_3: 3000
#
rank_mapping:
# ВНИМАНИЕ: Не активируйте эту опцию, если не знаете, что делаете.
# Это, вероятно, сломает конвертацию BBCode в Markdown и замедлит импорт.
use_bbcode_to_md: false
# Это путь к корневой директории вашей текущей установки phpBB (или её копии).
# Импортер ожидает найти директории /files и /images внутри базовой директории.
# Если вы не используете импортер на основе Docker, измените это на что-то вроде /var/www/phpbb.
# Это нужно только в том случае, если вы хотите импортировать аватары, вложения или пользовательские смайлики.
phpbb_base_dir: /shared/import/data
site_prefix:
# это нужно для переписывания внутренних ссылок в постах
original: ***.com # без http(s)://
new: https://****.org # с http:// или https://
# Включите это, если хотите перенаправлять старые ссылки форума на новые расположения.
permalinks:
categories: true # перенаправление /viewforum.php?f=1 в /c/category-name
topics: true # перенаправление /viewtopic.php?f=6&t=43 в /t/topic-name/81
posts: false # перенаправление /viewtopic.php?p=2455#p2455 в /t/topic-name/81/4
# Добавьте префикс к каждому типу ссылки, например 'forum', чтобы перенаправлять /forum/viewtopic.php?f=6&t=43 в /t/topic-name/81
# Оставьте пустым, если ваш форум был установлен не в подпапке.
prefix:
avatars:
uploaded: true # импортировать загруженные аватары
gallery: false # импортировать предустановленные аватары, предлагаемые phpBB
remote: false # ВНИМАНИЕ: Это может значительно замедлить импорт. Будет предпринята попытка загрузить удалённые аватары.
# Если true: анонимные пользователи импортируются как заблокированные пользователи. Они не могут войти в систему и не имеют адреса электронной почты.
# Если false: для всех анонимных пользователей будет использоваться системный пользователь.
anonymous_users: true
# Включите это, если хотите импортировать хеши паролей, чтобы использовать плагин "migratepassword".
# Это позволит пользователям входить в систему со своим текущим паролем.
# Плагин доступен по адресу: https://github.com/discoursehosting/discourse-migratepassword
passwords: false
# По умолчанию импортируются все следующие элементы. Вы можете отключить их, установив значение false.
bookmarks: true
attachments: true
private_messages: false
polls: false
# Если true: каждый импортированный пользователь получит оригинальное имя пользователя из phpBB в качестве своего имени
# Если false: имя каждого импортированного пользователя будет пустым, если только имя пользователя не было изменено во время импорта
username_as_name: false
# Сопоставьте эмодзи со смайликами, используемыми в phpBB. Большинство стандартных смайликов уже имеют сопоставление, но вы можете переопределить
# их здесь, если вам не нравятся некоторые из них.
# Синтаксис сопоставления: emoji_name: 'smiley_in_phpbb'
# Или сопоставьте несколько смайликов с одним эмодзи: emoji_name: ['smiley1', 'smiley2']
emojis:
# вот два примера сопоставлений...
smiley: [':D', ':-D', ':grin:']
heart: ':love:'
Я предполагаю, что это также относится к phpBB, так как я пытаюсь импортировать дампы от версии v3.2.x до v3.3.3, но количество отсутствующих родительских сообщений исчисляется тысячами. Даже после нескольких запусков и использования нескольких последовательных резервных копий версий. Для упрощения отладки скрипт мог бы выводить URL сообщения по его ID на старый форум для проверки (… viewtopic.php?p=57912)
Кстати, раз уж мы заговорили об этом, почему бы не записывать все строки импорта с ошибками вместе с их сообщениями в файл дампа для последующего анализа… просто мысль…
Один из случаев — когда существует тема viewtopic.php?f=3&t=1472, но первый пост viewtopic.php?p=145185 был удалён или исчез, и теперь первым постом темы является viewtopic.php?p=145186, который является «ответом».
Возможно, для ясности стоит явно указывать, не найдена ли родительская тема в дампе буквально или она просто ещё не была импортирована при восстановлении.
Я бы всё же хотел получить немного обратной связи, чтобы узнать, удалось ли всем недавно выполнить полный импорт с вложениями. У меня это не получается.
Сейчас я просто не знаю, проблема в скрипте или в базе данных форума phpbb
Это была очень старая версия phpBB с некоторыми плагинами. Я немного почистил систему и успешно обновился с phpBB 3.0.12 до последней версии 3.1 или 3.2, протестировал импорт для каждой версии, но это не сработало. Возможно, проблема в базе данных. Поэтому, если вам в следующий раз удастся выполнить полный импорт, буду рад узнать об этом. Если дело в базе данных phpBB, я проведу тщательное расследование с чьей-то помощью; если же проблема в скрипте, я могу подождать. Спасибо за ваше сообщение!
Я не помню, когда в последний раз делал импорт в phpBB3. Подозреваю (хотя точно не знаю), что это потому, что скрипт работает настолько хорошо.
Поскольку они загружаются в Discourse, проблема, скорее всего, в том, как на них ссылаются в постах на phpBB. Видите ли какие-либо ошибки при запуске? Они могут дать подсказки. Или, возможно, плагины изменили способ их отображения в постах и/или в базе данных. Вам, вероятно, придётся немного покопаться.
У меня было несколько сообщений о «отсутствующих файлах» и «неверном времени публикации»; эти же проблемы возникали при предыдущих импортах, поэтому я не считаю их серьёзной проблемой. Также на первом запуске появилось много ошибок «Родительский пост не существует», но об этом уже упоминалось в этой теме, и повторный запуск скрипта исправляет ситуацию.
В остальном скрипт работал довольно хорошо, без каких-либо серьёзных сбоев.
Существовал плагин (похоже, в основном файл .htaccess; я не администрировал этот форум), который организовывал файлы в подпапках (по месяцам и годам), но я разместил их в одной папке, и обновление на чистой версии phpBB прошло успешно. Все импортированные файлы корректно работали в phpBB 3.1 и 3.2.
Я немного глубже изучу базу данных; возможно, у меня есть SQL-файл от старого импорта. Я сравню таблицы вложений и постов на моём тестовом сервере. Возможно, я что-то упустил.
Привет! Я только что импортировал около 35 тысяч постов. Во время импорта я заметил множество сообщений вида «Родительский пост XXXXXX не существует. Пропуск». Когда процесс завершился, в форуме Discourse появились все (как мне кажется) «темы», но без единого ответа. По сути, был импортирован только заголовок темы, а не посты (за исключением первого, содержащего текст самой темы).
Кроме того, аватары не были импортированы, хотя я разместил их в правильной структуре папок в директории «import».
Исходный форум работал на phpBB2, был регулярно импортирован и отображался со всеми постами в phpBB3. Однако я ранее удалил многие старые сообщения; тем не менее, в phpBB3 всё выглядит нормально.
Есть какие-нибудь советы? Возможно, существует скрипт импорта, который я могу проверить?
Я перечитал тему несколько раз и выполнил несколько миграций, но каждый раз я запутывался из-за этого плагина и сталкивался с похожими ошибками. Сейчас я уже на третьей миграции, и это сводило меня с ума. Мне кажется, что принцип работы этого плагина может запутать пользователей, выполняющих миграции.
Где-то должно быть указано, что плагин следует активировать в Discourse после завершения процесса миграции. Если это уже где-то написано, возможно, я упустил эту информацию, и тогда её стоит выделить.
Обратите внимание, что начало регулярного выражения не предполагает наличие символа : после: <!-- s
Но оно предполагает его наличие в конце регулярного выражения: <!-- s?:
(Кстати, интересно, зачем в конце регулярного выражения используется ?, соответствующий 0 или 1 символу s, тогда как в начале его нет)
Я убрал этот : из регулярного выражения, и обе мои проблемы со смайликами, похоже, полностью решились.
На моём форуме phpBB многие смайлики действительно начинались с :, например :mrgreen: или :evil:, но некоторые нет, например 8-) или ;). Старое регулярное выражение приводило к некорректному захвату смайликов. Например, несколько смайликов подряд захватывались как один.
Я не вношу исправления напрямую в репозиторий Discourse, потому что не привык работать с git, а также не уверен, как это повлияет на импорт из других версий phpBB. Не хочу ничего сломать.
В любом случае, если кто-то столкнётся с теми же проблемами, что и я, вот решение.
Ещё одна проблема устранена, что могло бы помочь в моём случае при миграции с phpBB 3.0.7.
По какой-то причине содержимое постов на моём форуме phpBB иногда начиналось с нескольких лишних пробелов в начале строк. Я подозреваю, что некоторые пользователи «любят» бездумно и лихорадочно нажимать клавишу пробела при написании сообщений. Это не имело значения, поскольку отображаемая страница игнорировала эти лишние пробелы:
Сырой текст phpBB:
Salut tous <!-- s:) --><img src="{SMILIES_PATH}/icon_e_smile.gif" alt=":)" title="Sourire" /><!-- s:) -->
Alors voilà, le combi n'a pas roulé beaucoup ces derniers temps cause CT pas OK <!-- s:evil: --><img src="{SMILIES_PATH}/icon_evil.gif" alt=":evil:" title="Diable" /><!-- s:evil: --> mais il a fait ces 2000 kms sans broncher <!-- s;) --><img src="{SMILIES_PATH}/icon_e_wink.gif" alt=";)" title="Clin d\'oeil" /><!-- s;) -->
Maintenant le CT est OK . Merci L'Atelier Du Raz 8-')
Je dois donc changer le joint-spi au bout de 40 000 kms en 10 ans <!-- s:roll: --><img src="{SMILIES_PATH}/icon_rolleyes.gif" alt=":roll:" title="Yeux tournants" /><!-- s:roll: -->
C'est un silicone et j'ai vu qu'il y avait des "doubles lèvres " !?
What's About ?
Je trouve ça un peu limte <!-- s:evil: --><img src="{SMILIES_PATH}/icon_evil.gif" alt=":evil:" title="Diable" /><!-- s:evil: -->
Merci tous, fred
Я исправил это, добавив регулярное выражение, удаляющее пробелы в начале каждой строки:
text.gsub!(/^[^\S\r\n]+/, "\n")
Я добавил это непосредственно перед вызовом process_smilies(text) в этом файле:
Ещё одна проблема, с которой я столкнулся.
В этом коде (по-прежнему в text_processor.rb):
def clean_bbcodes(text)
# Многие теги bbcode phpbb имеют хеш, прикреплённый к ним. Примеры:
# [url=https://google.com:1qh1i7ky]click here[/url:1qh1i7ky]
# [quote="cybereality":b0wtlzex]Some text.[/quote:b0wtlzex]
text.gsub!(/:(?:\w{8})\]/, ']')
В моей базе данных длина этих хешей варьировалась от 5 до 8 символов, но регулярное выражение удаляло только хеши длиной ровно 8 символов. Поэтому при импорте более короткие хеши оставались вместо того, чтобы быть удалёнными.
Я исправил это, изменив регулярное выражение на:
text.gsub!(/:(?:\w{5,8})\]/, ']')
Я добавлю ещё одну незначительную проблему, всё в том же файле. Регулярное выражение, удаляющее теги BBCode [color], ожидало шестнадцатеричное значение, предварённое обязательным символом #. Однако тег [color] также принимает строки, такие как «red», «blue» и т. д., в качестве значения. Поэтому я изменил исходное регулярное выражение:
# remove color tags
text.gsub!(/\[\/?color(=#[a-z0-9]*)?\]/i, "")
Добавив ? после #, сделав его необязательным.
Исправленный код:
# remove color tags
text.gsub!(/\[\/?color(=#?[a-z0-9]*)?\]/i, "")
Не знаю, являются ли мои проблемы общими для импорта из phpBB или они очень специфичны для моего случая. Если второе, надеюсь, мои объяснения здесь не будут восприняты как неуместные или излишние. Просто дайте знать, если это так, чтобы избежать неловкости.
Редактирование: Возможно ли сделать так, чтобы после миграции все существующие темы помечались как «прочитанные» для всех существующих пользователей?
Цель — предотвратить ситуацию, когда после миграции существующие пользователи, переходящие по существующим (и иногда старым) темам, попадают на первое сообщение в этих темах, которое они уже прочитали до миграции.
В идеале, при переходе существующих пользователей по существующим темам должно открываться не первое, а последнее сообщение (разумеется, после завершения миграции).
Это, правда, небольшая проблема качества жизни (и она естественным образом исчезнет через несколько недель, когда пользователи начнут пользоваться форумом и читать темы), но мне задали вопрос об этом предложении.