Heroku + CDN Cloudfront + шрифты - ошибки Firefox

Недавно мы переместили наши активы на CDN Cloudfront. Мы заметили, что на Firefox были сломаны поверхности. После нескольких минут поиска это была история CORS. Мы разрешили поле Cloudfront.

application_controller:

after_filter :set_access_control_headers

def set_access_control_headers
  headers['Access-Control-Allow-Origin'] = CDN_CLOUDFRONT
end

production.rb:

CDN_CLOUDFRONT = "http://xxx.cloudfront.net"

Это работало очень хорошо до вчерашнего дня. После нескольких поисков и размышлений я не нашел решения.

Любая идея?

3 ответа

Решение

Я не работал с настройкой Heroku, но AFAIK (и как показано на developer.mozilla.org), заголовок Access-Control-Allow-Origin должен отражать значение домена, который потребляет статические активы из CDN.

Например: для веб-сайта, размещенного на http://mydomain.net/ и потребляющего ресурсы с http://wefe342r34r23.cloudfront.net/

headers['Access-Control-Allow-Origin'] = 'http://mydomain.net'

Позволит mydomain.net получить доступ к активам через http://wefe342r34r23.cloudfront.net/. Другими словами, замена CDN_CLOUDFRONT с доменным именем вашего сайта должен решить проблему.

Надеюсь это поможет.

PS: я не уверен, как ваша установка работала до вчерашнего дня.:)

PPS: Добавление альтернативных доменных имен (CNAME) в ваш CDN поможет вам в сценарии, в котором вы хотите быстро отказаться от существующего дистрибутива, доступного через http://xxx.cloudfront.net/ и начать использовать свежий дистрибутив http://yyy.cloudfront.net/. Вам не нужно ничего менять в кодовой базе приложения, если в этом случае вы используете альтернативное доменное имя, например http://cdn.mydomain.net/.

Обходной путь, который я использовал - загрузите шрифты отдельно в S3 и установите конфигурацию cors на корзине. Жесткий код шрифта ссылки на шрифты S3. Все ресурсы (кроме шрифтов) будут поступать из облачного фронта - ваши шрифты будут поступать из S3. Это некрасиво - но это работает....

Это копия того, что я разместил на другой странице Stack Exchange, связанной с той же темой, и я оставляю это на тот случай, если у кого-то возникнут те же проблемы, но он не найдет правильный ответ.

У меня была такая же проблема с приложением Rails 3 на Heroku; Значки Font-Awesome не показывались, потому что я управлял своими активами через Sumo CDN.

Есть несколько ответов, связанных с этим, один из которых - поместить after_filter в ваш application_controller, чтобы установить значение заголовка (от freemanoid), но это не сработало для меня, и мне пришлось использовать специальное промежуточное ПО, предложенное Питером Марклундом,

Оба решения размещены здесь под версиями Rails 3.1: Как установить access-control-allow-origin в webrick под rails?

Другие вопросы по тегам