Да, но вы переопределили это в пункте 2, поэтому, поступая так, вы снова возвращаетесь к размещению файлов в S3.
Настройки файла app.yml используются только при пересборке контейнера и применяются для заполнения файла config/discourse.conf в собираемом контейнере.
Ах! То есть, если в моём файле conf/discourse.conf есть какие-либо переменные с префиксом s3_, то Discourse считает, что загрузка в S3 включена? Понял… Теперь ясно… Я уберу это и попробую ещё раз.
Наверное, имеет значение только один из них… Я не за своим компьютером, чтобы проверить, что именно может вызвать эту ошибку, но если эта проверка сработает, я ожидаю, что ваш сайт будет загружать все новые файлы в S3.
Всё работает, работает, работает, работает-работает! Ура!!! Огромное спасибо за вашу работу и за то, что терпеливо объясняете, что нужно делать. Отлично, что всё наконец запущено.
У меня есть несколько быстрых вопросов, чтобы лучше понять, что происходит…
Я запускаю пакет по 100 элементов за раз. В первых нескольких циклах инструмент мигрировал посты (?), но теперь он просто копирует изображения. У меня тысячи и тысячи постов, и в каждом обычно только одно изображение… поэтому я не понимаю, почему/как он «закончил» посты для миграции? Что вообще означает «мигрировать пост»? Это вопрос 1: что именно происходит? ![]()
Вопрос 2 проще. Сейчас при запуске копируются только изображения, но я заметил, что изображения 2X копируются локально в папку 3X:
Downloaded 27/100: //my-forum-storage.s3.dualstack.us-east-1.amazonaws.com/original/2X/1/14c56ef9f1dddb7b7a6f14e920234e0f714ea699.jpeg to /uploads/default/original/3X/1/4/14c56ef9f1dddb7b7a6f14e920234e0f714ea699.jpeg
Обратите внимание, что URL меняется с 2X/1/xyz.jpeg на 3X/1/4/xyz.jpeg (добавлен лишний путь к папке).
Это нормально?
Наконец, я проверяю изображения выборочно, и они кажутся в порядке, но так как я не знаю, к какому посту относится то или иное изображение, я не могу провести «живую» проверку на форуме и быть на 100% уверенным, что пользователи видят всё правильно. Как сопоставить имя файла изображения (jpeg) с постом на форуме?
Какие именно команды вы вводили? Вам нужно увеличить лимит, чтобы охватить все ваши сообщения.
В итоге я указал большой лимит, когда убедился, что перехожу к следующему этапу, что-то вроде этого:
bin/rake uploads:batch_migrate_from_s3[100,100000]
Он мигрирует сначала загрузки, которые находит в сообщениях; в базе данных нет ссылочной целостности между ссылками в post.raw и объектом загрузки. Скрипт ищет сообщения с любыми ссылками на обычные URL или псевдопротокол upload://, представляющие удалённый контент, где необходимо как минимум повторно обработать сообщение после миграции, если не сохранить модификацию для базовых URL, указывающих напрямую на S3. Когда он не находит в сообщении никакого контента, требующего миграции, он переходит к следующему элементу.
Изменения путей не определяются напрямую скриптом миграции; это просто изменения в том, где Discourse размещает файлы. Добавление ещё одного уровня каталогов помогает повысить производительность при большом количестве файлов, и многие другие системы используют два, а иногда и три уровня каталогов для распределения файлов.
Вы можете столкнуться с той же проблемой, что и я: при миграции других загрузок Discourse потерял связь с аватарами пользователей. Я не заметил этого, пока уже было слишком поздно для восстановления из резервной копии, поэтому я просто написал затронутым пользователям, извинился и попросил их исправить свои аватары. Я до сих пор не знаю, что именно там пошло не так.
Ах, хорошо, круто. Я вижу это в выводе прогресса:
Все загрузки постов мигрированы. Миграция загрузок профиля...
Все загрузки профиля мигрированы. Миграция других загрузок, не связанных с постами...
Что такое «загрузки, не связанные с постами»? Именно здесь, похоже, остаётся вся работа — миграция постов и загрузок профиля ничего не делает.
Спасибо за успокоение относительно путей для сырых загрузок!
Не уверен, происходит ли это, но всё в порядке — мой сайт использует SSO, поэтому я передаю URL аватара каждый раз, когда пользователь входит в систему (или меняет изображение на основном сайте).
Честно говоря, я не знаю, что это было у остальных. Я скорее надеялся, что если важна ссылочная целостность, то будет ограничение внешнего ключа, а в противном случае система просто будет искать загрузку и использовать её в том месте, где она находится. Я действительно сталкивался с ограничениями внешнего ключа как с индикатором необходимости выполнить какие-то специальные действия для двух загрузок, привязанных к профилям пользователей.
Хм, кажется, всё работает… хотя сегодня утром я столкнулся с серьёзной проблемой… внезапно использование диска выросло на 25%, заполнило диск, и форумы полностью упали.
Сейчас, когда я запускаю rake, кажется, что изображения скачиваются/загружаются прямо во время пакетного выполнения. Я ввожу команду rake, она обрабатывает ровно 300 изображений (я запускаю их пакетами по 300), а затем завершается.
Так что главный вопрос: можно ли поставить в очередь просто перемещение этих загрузок из S3 на локальный диск? Не могло ли это создать какой-то накопленный пакет, который затем сработал в 5 утра и обрушил мои форумы? ![]()
Я настроил ожидание освобождения очереди перед выполнением каждой новой публикации при миграции постов, каждой новой партии загрузок профилей, а затем каждой другой загрузки. Обработка всех ваших изображений должна начинаться сразу после их перемещения. (Стандартная версия просто накапливает задачи и забивает очередь до завершения; в моём случае это означало бы 10–12 дней без отправки уведомлений форума, пока обрабатывались изображения.)
В голову не приходит, что могло вызвать такой скачок, если только система не столкнулась с множеством очень больших файлов?
Да, для меня это загадка. Я имею в виду, что я даже не запускаю пакетные операции так часто — я вручную ввожу команду каждый раз и наблюдаю за её выполнением. У меня больше нет постов или профилей для миграции; всё, что осталось, — это «другие загрузки». Когда я запускаю пакетную операцию, кажется, что она скачивает данные из S3 и сразу же загружает их в Digital Ocean. (И в Sidekiq я не вижу ничего, что указывало бы на наличие очереди задач.)
Я пытаюсь найти любые другие логи, которые могли бы указать, что произошло в 5:35 утра.
Прочитайте всю тему.
Но большая часть материала показалась мне запутанной. Хотя я хорошо знаком с командами Docker/контейнеров и базовыми командами Rails.
У меня возникают похожие проблемы (многие мои посты не показывают изображения, или изображения отображаются только после клика по ним).
Я использовал два разных S3-бакета в разное время года. У меня около 1000 постов и примерно столько же изображений.
Теперь я скопировал все изображения из S3-бакетов на свой локальный сервер. Подскажите, пожалуйста, как перенастроить URL-адреса в Discourse, чтобы изображения были корректно связаны с постами.