Запрос на улучшение скрипта импорта phpBB3

Попробовал и это:

root@vps116136-import:/var/www/discourse/config# su discourse -c “bundle exec rake db:drop”
exec: строка 1: “bundle”: команда не найдена

Извините, я должен был предвидеть эти проверки.

Попробуйте выполнить команду drop с этой переменной окружения:

cd /var/discourse
./launcher enter <your-container-name>

su discourse
DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop

В данном случае это не сработало, потому что вы находились не в той директории, где лежит Gemfile проекта — в вашем случае это /var/www/discourse.

Небольшое замечание: проще было бы иметь резервную копию с самого первого запуска форума, чтобы просто восстановить её перед повторной попыткой импорта. Но поскольку у вас её не было, мы прибегли к такому мягкому сбросу.

Всё ещё нет успеха.

root@vps116136-import:/var/www/discourse# su discourse
discourse@vps116136-import:/var/www/discourse$ DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop
PG::InsufficientPrivilege: ERROR:  must be owner of database discourse
Не удалось удалить базу данных «discourse»
rake aborted!
ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR:  must be owner of database discourse (ActiveRecord::StatementInvalid)

…

Пытаюсь сейчас как root…

Нет.

root@vps116136-import:/var/www/discourse# DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop
fatal: detected dubious ownership in repository at ‘/var/www/discourse’
To add an exception for this directory, call:

    git config --global --add safe.directory /var/www/discourse

rake aborted!

Забыть мои первые инструкции :smiling_face_with_tear:

  1. Скопируйте последнюю резервную копию из контейнера с помощью Docker cp. Резервные копии находятся в /shared/backups/default.
  2. Удалите общую папку из директории вашей установки (место, откуда вы запускаете ./launcher): rm -rf /var/discourse/shared.
  3. Пересоберите контейнер с помощью ./launcher rebuild <container-name>.

Это должно помочь, но будьте осторожны, чтобы не потерять резервную копию. Я пытался избежать этого совета, чтобы вы случайно не удалили резервную копию, но, похоже, это единственный путь вперед.

Это займёт некоторое время. Размер tar.gz — 15 ГБ.

На самом деле, это займёт…

200

За время, пока я начал, скачано уже 0,5 ГБ.

Готово.

Сделано.

Выполнено. Готов к запуску скрипта импорта, но…

/var/discourse/shared/standalone/import
├── data
├── mysql
└── settings.yml

Я же удалил это :index_pointing_up:, не так ли?

Да.

Полагаю, вы создали том для вашего контейнера MySQL внутри общей папки. Если так, то, к сожалению, вам придётся заново запустить контейнер и восстановить базу данных.

Вложения вы можете просто скопировать.

Настроить settings.yml снова не должно составить большого труда.

Я не совсем понимаю, что означает «заново запустить» контейнер. В первый раз я поместил файл phpbb_mysql.sql в директорию mysql согласно этим инструкциям. Нужно ли делать что-то еще?

Вложения вы можете просто скопировать.

Да. Только вот tar.gz весит 15 ГБ, потому что в директории phpBB /files находится 45 ГБ данных. Я работаю со своим форумом уже 22 года, знаете ли! Так что да, я их скопирую обратно. Но, скорее всего, я вернусь к этому только завтра.

Да, такова природа миграции сообществ. Хороший совет — начать с небольшой выборки, а после того, как вы отработаете процесс, можно выполнить полный импорт.

В настоящее время ведутся работы над тем, чтобы сделать инструменты более гибкими, а процесс — менее избыточным, но это очень сложная тема.

Надеюсь, у вас всё пройдёт гладко завтра.

Согласен! Но phpBB не упрощает уменьшение размера выборки. Я как бы застрял на том, что есть. Тем не менее, это была тестовая среда, и ничего не потеряно безвозвратно.

Спасибо! Я напишу сюда позже. Кстати, теперь, когда я стал экспертом по docker cp :zany_face:, не составит ли большого труда модифицировать ruby-скрипт так, чтобы он выводил post_id из phpBB при возникновении чего-то подобного?

8000 / 24451 ( 32.7%) [677 items/min] W, [2026-01-13T02:50:22.466363 #25640] WARN – : Bad date/time value "0000:00:00 00:00:00": mon out of range
W, [2026-01-13T02:50:22.466500 #25640] WARN – : Bad date/time value "0000:00:00 00:00:00": mon out of range
W, [2026-01-13T02:50:22.466600 #25640] WARN – : Bad date/time value "0000:00:00 00:00:00": mon out of range

Я всё ещё здесь! Убираю некоторые вещи перед повторным импортом и разбираюсь с возникшими проблемами. Жду, пока Клоуд уделит мне внимание, прежде чем переходить к следующему шагу. Но я обязательно вернусь…

disperse-lesley-nielsen

Отлично! Я разобрал свой последний снап без помощи Claude и начал импорт. Но вот ещё одна проблема:

Импортирование phpBB3 начинается…

/var/www/discourse/script/import_scripts/phpbb3/support/settings.rb:49:in initialize’: undefined method `[]’ for nil (NoMethodError)

  @site_name = import_settings["site_name"]
                              ^^^^^^^^^^^^^
    from /var/www/discourse/script/import_scripts/phpbb3/support/settings.rb:11:in `new'
    from /var/www/discourse/script/import_scripts/phpbb3/support/settings.rb:11:in `load'
    from script/import_scripts/phpbb3.rb:20:in `<module:PhpBB3>'
    from script/import_scripts/phpbb3.rb:16:in `<module:ImportScripts>'
    from script/import_scripts/phpbb3.rb:15:in `<main>'

Ничего страшного, моя вина. Файл settings.yml сломан. Извините, вернусь к этому, скорее всего, завтра.

Можно поэкспериментировать с отладкой через pry: вы можете добавлять точки останова в коде, чтобы открывать pry при их выполнении. Это позволит получить интерактивный CLI для просмотра данных. Или просто добавьте puts row[:post_id] в метод process_post, чтобы при появлении предупреждения вы могли увидеть последний id.

Да, именно это! Для вас это просто, а для меня не очень :zany_face: Я активно использовал Xdebug для отладки PHP на стороне сервера при разработке своих модификаций, но теперь официально нахожусь на этапе «старая собака и новые трюки» в своей жизни. Если вы сможете дать мне подробные инструкции, я с радостью внесу это изменение, но не буду притворяться, что умею взламывать Ruby. Пока что, во всяком случае…

P.S. Через 28 минут у меня будет встреча с Claude, надеюсь, что после того, как я справлюсь с текущей проблемой, смогу начать импорт.

Отлично, скрипт импорта выполняется с обновлёнными файлами .rb. Я отчитаюсь утром (зевота).

Упс. Вот что я вижу в посте с множеством фотографий:

Перед установкой MBC необходимо установить резиновую прокладку толкателя из оригинального главного цилиндра. Прокладка, поставляемая в комплекте, слишком мала. Снятие бака с давлением воздуха из блока гидроусилителя обеспечивает свободный доступ для установки новых тормозных магистралей.

~~[attachment=13]51.jpg[/attachment][attachment=12]52.jpg[/attachment][attachment=11]53.jpg[/attachment][attachment=10]54.jpg[/attachment][attachment=9]55.jpg[/attachment][attachment=8]56.jpg[/attachment][attachment=7]57.jpg[/attachment][attachment=6]58.jpg[/attachment][attachment=5]59.jpg[/attachment][attachment=4]60.jpg[/attachment][attachment=3]61.jpg[/attachment][attachment=2]62.jpg[/attachment][attachment=1]63.jpg[/attachment][attachment=0]~~64.jpg[/attachment]

Вот как этот пост выглядел в phpBB:

Как-то я сломал свой экземпляр Docker для тестовой среды. Сейчас я занимаюсь его повторной инициализацией.

Вместо того чтобы изменять скрипт импорта, я сделаю снимок и обработаю его постфактум с помощью скрипта, который извлечёт attach_ids, имена файлов и комментарии, а затем попытается добавить их в качестве подписей к изображениям (с небольшой помощью от Claude). Я не слишком оптимистичен, но сообщу, как всё получится.

Что касается предупреждений о некорректных значениях даты/времени, вот что сказал Claude:

Предупреждение исходит от gem-а EXIFR, который считывает EXIF-данные из файлов изображений (ваших вложений). Это не имеет никакого отношения к датам публикаций — речь идёт о метаданных внутри самих файлов изображений.

Предупреждение появляется при обработке вложений с некорректными метаданными даты/времени в EXIF. Это чисто косметическая проблема и не повлияет на ваш импорт.

Как вы и предполагали, @pfaffman. Но я рад, что теперь знаю, что именно вызывает это предупреждение.