Всем привет,
Хочу вернуться к моему предыдущему посту и сообщить, что я добился некоторого прогресса.
Что работает сейчас
- Загрузки пользователей корректно обслуживаются из моего S3-бакета через CDN (CloudFront), так что это отлично!
Однако у меня всё ещё есть проблема с предварительно скомпилированными ассетами
Предварительно скомпилированные ассеты по-прежнему не обслуживаются корректно через CDN.
Когда я устанавливаю DISCOURSE_CDN_URL на URL CloudFront (то есть https://dsuqioxhrz2qn.cloudfront.net), URL-адреса предварительно скомпилированных ассетов становятся следующими:
• https://dsuqioxhrz2qn.cloudfront.net/stylesheets/color_definitions_shades-of-blue_7_1_e6f11758f9c015d1e5ed9b08c437e9c5c267c932.css?__ws=forum.hobiguru.com
• https://dsuqioxhrz2qn.cloudfront.net/stylesheets/discourse-presence_308d905aa5c03567866fec50e9a28d8721ab0463.css
Проблема в том, что эти пути не существуют в моём S3-бакете. Предварительно скомпилированные ассеты загружаются в папку /assets/* в S3 (например, /assets/locales, /assets/plugins, /assets/scripts), но папки /stylesheets/ там нет, и, конечно, попытки загрузить эти URL приводят к ошибке 403 Forbidden.
Однако, если я изменю DISCOURSE_CDN_URL на https://forum.hobiguru.com, мой форум будет работать корректно, но ассеты теперь будут обслуживаться с сервера (например, https://forum.hobiguru.com/), а не через CDN (например, https://forum.hobiguru.com/stylesheets/admin_308d905aa5c03567866fec50e9a28d8721ab0463.css?__ws=forum.hobiguru.com).
Моя текущая конфигурация (для контекста):
app.yaml
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: eu-central-1
DISCOURSE_S3_ACCESS_KEY_ID: AKIA......LQMB
DISCOURSE_S3_SECRET_ACCESS_KEY: PaXQu7pKN.....fJNY
DISCOURSE_S3_CDN_URL: https://dsuqioxhrz2qn.cloudfront.net # Убедитесь, что URL CDN указывает на CloudFront
DISCOURSE_CDN_URL: https://forum.hobigur.com # ОБРАТИТЕ НА ЭТО ВНИМАНИЕ!
DISCOURSE_S3_BUCKET: hobiguru-s3-bucket-eu
и хуки компиляции:
hooks:
after_assets_precompile:
- exec:
cd: $home
cmd:
- sudo -E -u discourse bundle exec rake s3:upload_assets
- sudo -E -u discourse bundle exec rake s3:expire_missing_assets
Кажется, что после компиляции ассеты загружаются в S3 в определённую структуру, но при загрузке через CDN пути к объектам немного не совпадают.