Stop using Amazon s3 for uploads

После проведения некоторых экспериментов я обнаружил, что в некоторых моих сообщениях изображения не отображаются даже до выполнения какой-либо операции «переназначения».

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

И этот значок тоже исчезает (а на его месте появляется белое пространство/заполнитель изображения), если выполнить «Перестроить HTML» из меню с тремя точками или даже если выполнить любую операцию «перепечки» внутри контейнера.

Пожалуйста, дайте рекомендации.

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

В теории вы потеряете связь с этими файлами изображений только в том случае, если отключите свой бакет S3 или выполните переназначение некорректно.

Спасибо.
Я обнаружил, что иконка изображения показывает путь /bucket/uploads/optimized/folder/… (и поскольку изображения по этому пути не существует, само изображение не отображается, показывается только иконка).

Однако при клике на эту иконку изображение отображается/загружается из папки ‘Orig’, то есть по пути /bucket/uploads/original/…

Не понимаю, как у одного изображения могут быть сохранены два разных пути?!

В любом случае, теперь проблема сводится к тому, как найти сообщения, в которых изображения привязаны к неверному пути (в разделе ‘optimized’). Чтобы я мог исправить/переназначить их адреса на правильный путь в разделе ‘Original’.

Спасибо @nathank, @Pravi, @itsbhanusharma. Поскольку я перепутал различные проблемы/сценарии, сейчас я нахожусь в следующей ситуации:

  1. Некоторые из моих постов не отображают загруженные к ним изображения. Вместо этого при наведении курсора мыши на них показывается маленькая иконка с неверным URL/адресом бакета. Либо некоторые из них показывают правильное изображение и правильный путь к бакету ТОЛЬКО при клике на эти маленькие иконки. А изображения в других постах вообще не отображаются, оставляя лишь пустое белое пространство.
    Кроме того, когда я выполнил операцию remap (remap wrongbucketurl correctbucketurl), то в одном выборочном посте обнаружил следующее: хотя сначала маленькая иконка была заменена правильным изображением (я обрадовался), на следующий день это изображение полностью исчезло, даже иконки не осталось. Вместо него появилось белое пространство. Поэтому мне пришлось восстановить свой сайт на состояние предыдущего дня.

  2. Когда я выполнил эту команду, результат был следующим:

# rake posts:missing_uploads
Поиск отсутствующих загрузок на: default

Отсутствует 19 загрузок постов.

Отсутствует 19 загрузок.
Затронуто 6 из 7792 постов.

Вы ещё не выполнили миграцию в локальное хранилище. Я проверил ваш сайт, и ссылки на S3 всё ещё присутствуют.

Команда выглядит примерно так:

./launcher enter app
  discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
  discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
  rake posts:rebake

Я провёл десятки вариаций этого процесса, но он всё ещё не работает.

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

Сначала я проверил битые ссылки и, исходя из этого, смог определить значения, которые нужно использовать при перенаправлении (как я думал), и теперь работает много изображений. Но большинство, скажем, более 90%, всё ещё не работают. В отличие от ситуации с битыми ссылками S3, где вы хотя бы можете их проверить, чтобы понять, что пошло не так, здесь я вижу только это:

link

Неужели кто-то знает, что может вызывать эти сбои изображений? Я застрял на этом уже несколько дней. Невероятно, что: а) нет способа вернуться назад, и б) кто-то (не я) выполнил миграцию, хотя возможности отката нет.

Для ясности: я следовал процессу, описанному выше пользователем @nathank. Я пробовал много раз, внося небольшие изменения в пути на этапе перенаправления, потому что мне непонятно, являются ли эти инструкции универсальными или зависят от структуры вашего каталога (у нас много подкаталогов, которые успешно скопированы из S3 с помощью шага синхронизации S3).

Я был бы очень признателен за помощь, так как я уже на грани отчаяния.

Я думаю, что вам нужно включить скрытую настройку include_s3_uploads_in_backups, создать резервную копию, а затем восстановить её (сначала я бы попробовал это на новом тестовом сервере). Именно так происходит, когда клиент CDCK отменяет подписку: эти резервные копии успешно восстанавливаются на новый самостоятельный хостинг без каких-либо проблем.

Привет, Джей! Спасибо за ответ. Извини за мою неосведомлённость, но как мне это включить?

Извините. Что-то вроде

./launcher enter app
rails c
SiteSettings.include_s3_uploads_in_backups=true
exit
exit

Я попытался сделать это, но получил:

NoMethodError: undefined method include_s3_uploads_in_backups=' for SiteSettings:Module from (pry):1:in pry

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

О, у нас два контейнера, и я запускаю это в web_only. Команда Rails не найдена в контейнере data, поэтому я предполагаю, что это правильный подход.

Похоже, команда должна была быть такой:

SiteSetting.include_s3_uploads_in_backups=true

Я выполнил её, затем создал новую резервную копию. Восстановил систему из этой копии, но изменений нет — большинство изображений по-прежнему отображают иконку ошибки, показанную выше. Я также попытался пересобрать оба контейнера, но это не помогло.

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

Для справки: в итоге мне удалось это исправить. Я начал заново (то есть из снимка моего экземпляра) и уверен, что процесс, который в конце концов сработал, был следующим:

  • использовать rails console для выполнения SiteSetting.include_s3_uploads_in_backups=true
  • создать новую резервную копию
  • восстановить из этой резервной копии
  • использовать discourse remap для обновления ссылок на различные расположения файлов S3 на локальное расположение
  • пересобрать сообщения и пересоздать оба моих docker-контейнера

Спасибо @pfaffman за то, что указали мне правильное направление.

РЕДАКТИРОВАНИЕ

Думаю, стоит упомянуть и это. После предыдущего сообщения я понял, что в шести наших темах до сих пор отображаются битые изображения (хотя подавляющее большинство теперь в порядке).

Это наши шесть самых старых постов, и все исходные изображения имели другой URL S3, чем все остальные. Очевидно, это не совпадение. Поэтому я проверил, что все эти файлы находятся в директории uploads/default/original/1X, и они там есть. Затем я выполнил команду remap с использованием этого уникального URL S3 — и, казалось, это отредактировало нужное количество постов. После этого я пересобрал сообщения и пересоздал контейнеры, но эти темы всё ещё не работают. У кого-нибудь есть идея, почему небольшое количество постов может так завершаться неудачей?