Heroku + Rails4.2: настройка Cloudfront
Я пытаюсь настроить Cloudfront для моего приложения heroku. Документация, кажется, отсутствует, чтобы стоять независимо.
Ниже приведены шаги, которые я выполнил:
1. Setup Cloudfront in AWS console
2. Added cloudfront domain name to production.rb `config.action_controller.asset_host = 'XXXX.cloudfront.net'`
3. Set `config.assets.compile = true` in production.rb
4. Verified AWS_SECRET_ACCESS_KEY is correct in heroku config
5. I have added `gem 'rails_12factor', group: :production`
Больше нет загрузки ресурсов. Любой шаг, который мне не хватает в настройке?
Update1:
В хром-отладчике ресурс правильно запрашивается у облачного облака из этого URL-адреса: http://XXXXX.cloudfront.net/assets/application-22c7c249df1a24541d86603b0715eefe.css
Однако в заголовке запроса см. < <21 > . Мне интересно, есть ли у меня цикл перенаправления и как его можно отлаживать.
Update2
Спасибо всем за предложения. Дополнительная информация:
- Когда я пытаюсь загрузить актив из своего приложения, я получаю перенаправление на домашнюю страницу в браузере, но с помощью curl я могу получить актив. ex: curl 'http://www.myapp.com/assets/application-c9a778bb55ad4152d956fd34fe6f7839.css'
- Приложение не использует SSL. Тем не менее, я по-прежнему установил политику протокола Origin для соответствия программе просмотра в соответствии с предложениями @Omar.
- Я попытался загрузить актив из своего приложения в браузере и смог получить доступ к активам. ex: 'http://www.myapp.com/assets/application-c9a778bb55ad4152d956fd34fe6f7839.css'
Однако, пытаясь получить доступ к активам непосредственно на облачном (d1ax5oefcdtdki.cloudfront.net/assets/application-c9a778bb55ad4152d956fd34fe6f7839.css) перенаправляет его на myapp.com
- Скриншоты для облачного DS:
https://www.dropbox.com/s/bkg480d4it6zl2r/Screenshot%202015-12-06%2014.01.28.png?dl=0
http://glui.me/?i=7ah73hffrhvmpt7/2015-12-06_at_2.02_PM.png/
https://www.dropbox.com/s/dd4wwgm3md8w7qn/Screenshot%202015-12-06%2014.05.20.png?dl=0
Ответы
Ответ 1
Для всех, у кого есть проблемы с отладкой cloudfront.
Проблема заключалась в переадресации в Cloudfront (возможно, из-за неправильной настройки). После недействительности кеша я смог заставить CF получать из своего приложения активы и обслуживать их.
![введите описание изображения здесь]()
Ответ 2
Когда вы запрашиваете актив в первый раз, облачный контроль проверяет, кэшируется ли файл или нет, например, вы запрашиваете:
http://XXXXX.cloudfront.net/assets/application-22c7c249df1a24541d86603b0715eefe.css
в первый раз облачный экран даст пропущенную кэш, а затем вытащит файл из эквивалентного пути из рельсов. Чтобы следующий раз вы запрашивали тот же файл, он будет уже кэширован.
Чтобы это сработало, вам нужно убедиться, что у вас все настроено правильно.
От стороны рельсов нечего делать, кроме установки assets_host в production.rb. Поскольку у вас уже есть драгоценный камень rails_12factor
, нет необходимости добавлять config.assets.compile = true
. Из документации драгоценного камня вы можете видеть в разделе, в котором он добавляет сервисные статические активы документация.
С облачной стороны, где я думаю, что вы столкнулись с проблемой, вам нужно установить некоторые параметры, чтобы облачные службы знали, как он может связываться с вашим приложением rails, когда кеш промахивается. В настройке облачного режима вам необходимо проверить
Origin Domain Name
, чтобы быть URL-адресом вашего приложения rails.
Origin Protocol Policy
to Match Viewer
Distribution State
до Enabled
Также есть некоторые другие настройки, которые могут помочь вам оптимизировать кеширование доставки контента.