Я настроил новый хост, чтобы иметь среду «staging» (тестовую). Я воссоздал ту же установку Discourse с тем же, по идее, версией. У меня запущена версия 2.8.2.
Первое замечание: начиная с версии 2.8.2 размер моей резервной копии уменьшился с 282 МБ до примерно 90 МБ. Не знаю почему, но я просто воспользуюсь этим, добавив немного здравого смысла.
Я загрузил последний архив с моего форума и разместил его в локальном хранилище новой тестовой среды.
Восстановление не удалось из-за следующей ошибки:
[2022-02-27 19:41:18] ALTER TABLE
[2022-02-27 19:41:18] ALTER TABLE
[2022-02-27 19:41:18] Миграция базы данных...
[2022-02-27 19:43:00]
[2022-02-27 19:43:00] Переподключение к базе данных...
[2022-02-27 19:43:00] Перезагрузка настроек сайта...
[2022-02-27 19:43:00] Отключение исходящей почты для пользователей, не являющихся сотрудниками...
[2022-02-27 19:43:02] Отключение режима только для чтения...
[2022-02-27 19:43:02] Очистка кэша категорий...
[2022-02-27 19:43:02] Перезагрузка переводов...
[2022-02-27 19:43:02] Переназначение загрузок...
[2022-02-27 19:43:02] Переназначение 'https://forum.geekbeacon.org' на 'https://forum-staging.geekbeacon.org'
[2022-02-27 19:43:08] Восстановление загрузок, это может занять некоторое время...
[2022-02-27 19:43:36] ИСКЛЮЧЕНИЕ: 8 постов не переназначены на новый URL загрузки S3. Миграция S3 не удалась для базы данных 'default'.
[2022-02-27 19:43:36] /var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:87:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:373:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:66:in `migrate'
/var/www/discourse/lib/file_store/s3_store.rb:317:in `copy_from'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:62:in `restore_uploads'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:44:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:61:in `run'
/var/www/discourse/script/spawn_backup_restore.rb:23:in `restore'
/var/www/discourse/script/spawn_backup_restore.rb:36:in `block in <main>'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `fork'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `<main>'
[2022-02-27 19:43:36] Попытка отката...
[2022-02-27 19:43:36] Откат...
[2022-02-27 19:43:36] Очистка...
[2022-02-27 19:43:36] Удаление функций из схемы discourse_functions...
[2022-02-27 19:43:36] Удаление временной директории '/var/www/discourse/tmp/restores/default/2022-02-27-194051'...
[2022-02-27 19:43:36] Возобновление работы sidekiq...
[2022-02-27 19:43:36] Пометка восстановления как завершенного...
[2022-02-27 19:43:36] Уведомление 'csgeek' об окончании восстановления...
Это ваша проблема. Возможно, стоит использовать то же ведро S3. Также проверьте, включена ли скрытая настройка с названием вроде «скачивать S3 при резервном копировании». Вам нужно найти название этой настройки в исходном коде или документации.
Или, возможно, вам нужно убедиться, что остальные файлы загрузок на продакшн-сайте также хранятся в S3.
У меня не настроен S3. Я предполагаю, что на старом сервере остались старые данные, которые не были сопоставлены с корректным расположением в S3.
Я вернулся к старому серверу, где у меня настроено два бакета: один для резервных копий, другой для медиафайлов. Я следовал руководству и настроил AWS S3, включая CDN.
Когда я запустил rake uploads:migrate_to_s3, команда завершилась ошибкой. После этого я выполнил posts:rebake, что, похоже, уменьшило количество ошибок, но процесс всё ещё не удаётся:
Обратите внимание: миграция на S3 в настоящее время необратима!
Нажмите [CTRL+c] для отмены или [ENTER] для продолжения.
Миграция загрузок на S3 для 'default'...
Загрузка файлов в S3...
- Список локальных файлов
=> 208 файлов
- Список файлов в S3
. => 978 файлов
- Синхронизация файлов с S3
................................................................................................................................................................................................................
Обновление URL-адресов в базе данных...
Удаление старых оптимизированных изображений...
Пометка всех постов, содержащих лайтбоксы, для пересборки...
15 постов помечены для пересборки
rake aborted!
FileStore::ToS3MigrationError: 1 пост не был пересопоставлен с новым URL-адресом загрузки в S3. Миграция на S3 не удалась для базы данных 'default'.
/var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:87:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:373:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:66:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:123:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:102:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-4.0.0/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-4.0.0/lib/rails_multisite/connection_management.rb:90:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:100:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:96:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Задачи: TOP => uploads:migrate_to_s3
(Полный трассировочный вывод можно получить, запустив задачу с флагом --trace)
Есть ли способ запустить migrate_to_s3 в режиме подробного вывода, чтобы определить проблемный пост?
Восстановление завершается ошибкой с сообщением вроде этого?
FileStore::ToS3MigrationError: 1 posts are not remapped to new S3 upload URL. S3 migration failed for db 'default'.
В таком случае лучшее решение — исправить пост(ы), в которых файлы загружены не в то место. Однако, возможно, в этом тесте есть случай ложного срабатывания. В таком случае можно использовать переключатель для задачи rake, который приостановит выполнение, чтобы вы могли всё исправить. Я не могу быстро найти его, и его нет на Backup discourse from the command line, где он должен быть. Сейчас я занят другой задачей, поэтому не могу найти его прямо сейчас.
Это приостановит восстановление, и вы сможете поработать с базой данных в другом терминале, чтобы исправить проблему. Или, как я понимаю, вы можете просто остановить процесс до того, как будет выполнена эта проверка.
Я бы посмотрел на код, который выполняет эту проверку, и затем запустил бы тот же запрос. Возможно, я уже публиковал код для этого ранее.
Я публиковал
Вы это сделали? Мне кажется, вы могли просто нажать Ctrl+C после завершения восстановления базы данных. Вы выполняете восстановление только базы данных?
О черт, я даже не подумал о том, чтобы остановить восстановление после базы данных, но до загрузки файлов.
Мне не нужно переносить файлы с S3 — могу ли я просто мигрировать фронтенд и базу данных?
Можешь подсказать, какой вариант позволяет остановить rake-задачу для постов и выявить проблемные? Буду очень благодарен.