Migrate_to_S3 не удаётся при ребейке

Редакция: Похоже, ваша ошибка отличалась от моей. Судя по всему, некоторые из ваших изображений не были перенесены в S3. Извините, я неправильно понял. Возможно, часть информации ниже всё ещё полезна. Вы настраивали загрузку в S3 по этому руководству? Configure an S3 compatible object storage provider for uploads

@evenif — Сожалею, что у вас возникли проблемы с этим. Я планировал написать руководство для тех, кто сталкивается с аналогичными проблемами, так как значительную часть информации пришлось собирать по разным темам. Но я жду, пока, надеюсь, будут исправлены аватары, так как, как вы видите выше, у меня всё ещё есть с ними проблемы.

Если вы выполните это в Rails, что вернётся: true или false?

SiteSetting.migrate_to_new_scheme

Если false, то можно попробовать установить значение true так:

SiteSetting.migrate_to_new_scheme = true

Затем либо подождать некоторое время и вернуться позже (по-моему, это выполняется каждые 15 минут, если не ошибаюсь), но если хотите запустить немедленно:

Jobs::MigrateUploadScheme.new.execute(nil)

Затем проверьте снова позже, является ли SiteSetting.migrate_to_new_scheme теперь false (это означает, что процесс должен был завершиться).

Затем выполните:
Upload.by_users.where("url NOT LIKE '//%' AND url NOT LIKE '/uploads/default/original/_X/%'").to_a

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

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

Upload.find(1).destroy
Upload.find(2).destroy
Upload.find(3).destroy

Заменяя 1, 2, 3 и т. д. на ID загрузок. Скопируйте и вставьте весь список в Rails и нажмите Enter. Это должно удалить эти проблемные записи.

Затем выйдите из Rails (введите exit), и всё, что вам нужно сделать, это запустить:

rake posts:rebake
или
rake posts:rebake_uncooked_posts

Uncooked позволяет возобновить процесс перекомпоновки, если он прервётся. Я рекомендую использовать обычный rebake, если у вас нет огромного количества загрузок.

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

Вы можете проверить, успешно ли перенеслись аватары (по крайней мере, для некоторых пользователей), выполнив в Rails для пользователя, у которого отображается аватар по умолчанию:
User.find_by_username('username').uploaded_avatar

Также можно проверить наличие оптимизированных версий с помощью:
OptimizedImage.where(upload_id: upload_id).where(version: 2)