# Не удалось выполнить миграцию в S3, поэтому невозможно восстановить из резервной копии

**URL:** https://meta.discourse.org/t/unable-to-migrate-to-s3-therefore-unable-to-restore-from-backup/220484
**Category:** Self-hosting
**Created:** [09.Март.2022 02:21:40 UTC](https://meta.discourse.org/t/unable-to-migrate-to-s3-therefore-unable-to-restore-from-backup/220484 "2022-03-09T02:21:40Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![teward](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/teward/32/148702_2.png) [@teward](https://meta.discourse.org/u/teward)
#### Post date: [09.Март.2022 02:21:41 UTC](https://meta.discourse.org/t/unable-to-migrate-to-s3-therefore-unable-to-restore-from-backup/220484/1 "2022-03-09T02:21:41Z")

</div>

Итак, у меня есть резервная копия Discourse с нашего начального сервера, и мы пытаемся перенести систему на новую.

К сожалению, возникли две проблемы:

1. Во время восстановления сообщается, что 71 из 1073 файлов загрузок не перенесены в S3, из-за чего процесс восстановления критически завершается с ошибкой.

2. При попытке исправить это на _основном_ экземпляре путем повторной обработки (rebaking) постов и других действий система указывает, что некоторые файлы загрузок по-прежнему не перенесены в S3, даже когда я пытаюсь использовать механизм rake `uploads:migrate_to_s3`.

Есть ли **какой-либо** способ получить подробную информацию от `migrate_to_s3` о том, _какие именно_ файлы загрузок не перенесены, чтобы я мог исправить это вручную? Возможно, они ссылаются на нерабочее/неудачное хранилище S3, куда мы изначально загружали файлы. В тот момент всё пошло наперекосяк, и мы просто сменили механизм S3 (конечно, на MinIO), но на стороне AWS S3 всё ещё оставались старые данные. Которые, как мне кажется, я не смогу легко перенести в наш экземпляр MinIO.

Или, возможно, есть способ отключить проверку загрузок в S3 механизмом восстановления, поскольку я уже принудительно выполнил миграцию загрузок самостоятельно?

---

<div class="post-metadata">

### Author: ![teward](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/teward/32/148702_2.png) [@teward](https://meta.discourse.org/u/teward)
#### Post date: [09.Март.2022 03:08:59 UTC](https://meta.discourse.org/t/unable-to-migrate-to-s3-therefore-unable-to-restore-from-backup/220484/2 "2022-03-09T03:08:59Z")

</div>

OK, понятно, разобрался после глубокого анализа БД. Похоже, это остатки (71 загрузка) из изначально давно отключенной среды S3 (или, в данном случае, доступной, но не основной среды S3, так как её использование было бы экономически нецелесообразным).

В итоге сделал следующее:

**С исходного сервера:**

> 1. `./launcher enter app`
> 
> 2. `sudo -u postgres psql discourse`
> 
> 3. `SELECT url FROM uploads WHERE url NOT LIKE '%ExpectedS3DomainGoesHere%`  
> (замените ExpectedS3DomainGoesHere на фактический URL, используемый в вашей конфигурации S3)  
> Это позволит получить URL-адреса для дальнейшей работы, так как нам нужно выполнить несколько действий.
> 
> 4. Если URL-адреса относятся к старым бакетам на других доменах, используйте клиент Amazon S3 (или клиент вашего бэкенда хранилища S3) и:  
> a. Синхронизируйте бакеты с неожиданными URL-адресами (если они доступны) в локальное хранилище.  
> b. Синхронизируйте элементы из локального хранилища в новый бакет.
> 
> 5. `discourse remap OLD-URL-FROM-DB NEW-URL-FROM-DB`  
> Хотя в [этой теме](https://meta.discourse.org/t/moving-from-one-s3-bucket-to-another/184779/2) предлагалось использовать DbHelper.remap, функция remap из Discourse сработала отлично.
> 
> 6. Убедитесь, что данные мигрированы.  
> `rails uploads:migrate_to_s3`
> 
> 7. Время пересоздания (rebake)!  
> ` rails posts:rebake`
> 
> 8. Снова создайте резервную копию сайта на исходной машине/сервере. Скачайте последнюю версию.

**С нового целевого сервера:**

> 1. Настройте Discourse как обычно, скопируйте app.yml и другие файлы с исходного сервера на новый сервер в `/var/discourse/containers/`, чтобы убедиться, что пересборка затрагивает необходимые плагины и т. д.  
> Однако, если вы работаете с локальными резервными копиями, обязательно закомментируйте любые записи `DISCOURSE_BACKUP_LOCATION: s3` в файле app.yml. У меня возникли проблемы с S3: файлы резервных копий обрезались, поэтому я выбрал локальный подход для восстановления.
> 
> 2. Следуйте инструкциям по адресу [Restore a backup from the command line](https://meta.discourse.org/t/restore-a-backup-from-command-line/108034), чтобы загрузить резервную копию на сервер и восстановить её. Включая шаги пересборки.

Мне было довольно больно это исправлять, но после глубокого анализа таблицы uploads в БД проблема была решена. Тем не менее, похоже, всё сработало, так что…

---

<div class="post-metadata">

### Author: ![michaeld](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/michaeld/32/1594_2.png) [@michaeld](https://meta.discourse.org/u/michaeld)
#### Post date: [09.Март.2022 05:43:27 UTC](https://meta.discourse.org/t/unable-to-migrate-to-s3-therefore-unable-to-restore-from-backup/220484/3 "2022-03-09T05:43:27Z")

</div>

В таких ситуациях часто помогает временное отключение загрузки в S3 на исходном экземпляре перед созданием резервной копии. После восстановления вы можете снова включить S3.

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [08.Апрель.2022 05:43:37 UTC](https://meta.discourse.org/t/unable-to-migrate-to-s3-therefore-unable-to-restore-from-backup/220484/4 "2022-04-08T05:43:37Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
