Загрузка ресурсов в S3 после обновления в браузере

После переноса изображений и ассетов (js) моего сайта на S3 я попытался обновить форум через интерфейс /admin/upgrade. Обновление прошло успешно, но, похоже, ассеты не были загружены в бакет S3, из-за чего мой сайт стал недоступен, пока я не пересобрал приложение из командной строки.
Там у меня есть хук, который делает это за меня. Было бы здорово иметь подобный функционал и в веб-интерфейсе. Не знаю, есть ли он уже; если да, пожалуйста, дайте знать. :slight_smile:

 after_assets_precompile:
   - exec:
       cd: $home
       cmd:
         - sudo -E -u discourse bundle exec rake s3:upload_assets

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

А, я понял. Мне нравился бесшовный способ обновления без простоя, пока я не перешел на S3. Есть ли возможность не отдавать JS через S3, а использовать его только для изображений?

Через S3 нельзя раздавать JS-файлы. S3 предназначен только для загрузки и раздачи медиафайлов (изображения, документы, видео и т. д.).

Для работы с JS вам понадобится CDN, например CloudFront.

Да, я не раздаю JS напрямую из S3, он хранится в S3, но раздается через CDN. Я хотел спросить: можно ли хранить JS локально и раздавать его через CDN, оставляя на S3 только медиафайлы?

Опять вы всё неправильно поняли.

Discourse JS предназначен для прямой раздачи через CDN, при этом установка Discourse выступает в качестве pull-оригина. Не знаю, как вы планируете размещать JS в S3, но имейте в виду: JS пересобирается при каждой пересборке. Всё, что вы будете отдавать через S3, скорее всего, устареет, и это только создаст дополнительные проблемы.

Это началось после того, как я настроил параметры S3, следуя этой инструкции: Configure an S3 compatible object storage provider for uploads

Именно поэтому они добавили хук after_assets_precompile для загрузки обновленных ресурсов на S3.

Как мне это исправить? При попытке получить доступ к любому ресурсу через локальный сервер возвращается ошибка 404. Ресурсы должны загружаться через S3. Иначе я бы настроил правило маршрутизации на граничном узле CDN для обработки запросов к ресурсам через локальный домен.

Если вы прочитали заголовок поста, в нём сказано «Объектное хранилище для загрузок» — этого достаточно.

Что вы имеете в виду под локальным доменом? Где установлен ваш Discourse?

Под локальным доменом я имел в виду сервер, на котором установлен Discourse, то есть JS-файлы находились локально на сервере nginx, а не на S3.

К сожалению, обсуждаемая тема не предусматривает этого, даже несмотря на то, что она называется «использование объектного хранилища для загрузок». Если вы настроите свой форум в соответствии с инструкциями в этой теме, это потребует выгрузки ассетов на S3.

Как я могу настроить это так, чтобы иметь возможность хранить файлы JS на сервере установки Discourse?