Теперь, после восстановления (ключевым моментом было отключение загрузки в S3), все ссылки на вложения в сообщениях оказались битыми (ошибка 404). Я поискал на форуме, но не нашел решения и надеюсь, что кто-то сможет указать мне правильное направление.
У меня есть два варианта:
Можно ли исправить эти битые ссылки short-url, которые ведут на вложения, встроенные в сообщения (все битые ссылки относятся к вложениям в сообщениях; встроенные изображения отображаются корректно, другие внутренние ссылки работают нормально)?
Например, URL вложения в сообщении на форуме выглядит так: https://XYZ.com/uploads/short-url/phu1HOLvkE8LWpkKYfnMPSWsvHh.zip. Вот что я вижу в логах при клике на ссылку вложения в сообщении (что приводит к ошибке 404):
Сообщение (5 копий)
Не удалось корректно обработать перехваченный ответ: Errno::ENOENT : Нет такого файла или каталога @ rb_sysopen - /XXXXX.s3.dualstack.us-east-1.amazonaws.com/optimized/1X/46728e07f9819907d1b18387bf02ea7fc25c7981_2_32x32.ico
Трассировка стека
/var/www/discourse/app/controllers/static_controller.rb:160:in read' /var/www/discourse/app/controllers/static_controller.rb:160:in block (2 levels) in favicon’
/var/www/discourse/lib/distributed_memoizer.rb:16:in block in memoize' /var/www/discourse/lib/distributed_mutex.rb:33:in block in synchronize’
/var/www/discourse/lib/distributed_mutex.rb:29:in synchronize' /var/www/discourse/lib/distributed_mutex.rb:29:in synchronize’
/var/www/discourse/lib/distributed_mutex.rb:14:in synchronize' /var/www/discourse/lib/distributed_memoizer.rb:12:in memoize’
/var/www/discourse/app/controllers/static_controller.rb:138:in block in favicon' /var/www/discourse/lib/hijack.rb:56:in instance_eval’
Я очень надеюсь, что существует способ исправить эти ссылки short-url после отключения опции загрузки в S3 при восстановлении сервера из резервной копии. Пересборка сообщений (post re-bake) не помогла.
Если по какой-то причине это тупиковый путь и проблему нельзя решить массово, то теперь у меня на облаке S3 остались тысячи изолированных вложений. Есть ли способ очистить их и освободить место? Может ли Discourse пройти по своему бакету загрузки S3 и удалить все изолированные ресурсы?
Возможно, было или могло быть возможным выяснить, как исправить эти ссылки, но сам способ решения выходит за рамки того, что реально обсуждать на форуме.
Проверьте, есть ли у вас файл с именем b13050bdcd2d58924ba6ab3e7608b16bfc3cd1b7.zip где-либо в ваших загрузках и/или в S3-хранилище. Если он есть, то исправить ситуацию, хотя и непросто, но возможно.
Так как вы не указали реальные названия форума или хранилища, мы не можем помочь вам здесь.
Я так считаю, но, думаю, это должен написать кто-то, кто хорошо знаком с Discourse и Rails. Мне неизвестно о существующем решении вашей проблемы. Есть несколько тем о переносе между бакетами S3, которые могут дать некоторые подсказки, но я не думаю, что ваша конкретная проблема решалась ранее.
Ну да, это именно то, что я вам изначально рекомендовал сделать… Если вы не включите загрузку в S3, функция short-url будет искать эти файлы локально, хотя они находятся в S3.
Я попробую, но с другой стороны, когда я его включил, восстановление сломалось (см. мою другую тему). С помощью Джейса мне пришлось разобраться, как отключить загрузку, чтобы в конечном итоге восстановить. Вам удалось успешно восстановить сервер с включенной опцией?