Rails активы Cloudfront потрясающий CORS

Я перепробовал множество решений, найденных в stackru/github для этой проблемы, но не могу заставить его работать.

Я использую font-awesome-rails и прекомпилирую свои ресурсы для производства. Я установил CloudFront для своих активов в моей рабочей конфигурации:

config.action_controller.asset_host = "https://XXXX.cloudfront.net"

Когда я загружаю страницу (из Chrome/Firefox, потому что Safari в порядке с CORS), я получаю это общее сообщение об ошибке:

Font from origin 'https://XXXX.cloudfront.net' has been blocked from loading by Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://example.com' is therefore not allowed access.

Я уже пытался:

  1. Добавить стеллаж-камень и изменить мой config.ru безуспешно
  2. Установить after_filter установить заголовки сервера без успеха
  3. Создать недействительными в CloudFront для трех замечательных файлов без успеха

Обходной путь должен был бы удалить замечательный драгоценный камень и использовать вместо этого:

<%= stylesheet_link_tag "//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css", :media => "all" %>

Но я бы лучше нашел вопрос.

Спасибо

1 ответ

У меня была эта проблема, и она была решена путем внесения следующих изменений. Прежде всего, установите заголовок на вашем http-сервере add_header Access-Control-Allow-Origin *;

используется полная конфигурация:

location ~* \.(ttf|ttc|otf|eot|woff|woff2|svg|font.css)$ {
  add_header Access-Control-Allow-Origin *;
  expires max;
  allow all;
  access_log off;
  add_header Cache-Control "public";
}

а затем создайте аннулирование в Cloudfront.

PS: я не использовал стеллажи или любой другой драгоценный камень

Это решение сработало для меня:

Your Bucket> Permissions> CORS Configuration и вставьте следующую конфигурацию:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>

В вашем проекте Rails:

> vim environments/production.rb

добавлять:

if ENV['CLOUDFRONT_ENDPOINT']
    config.action_controller.asset_host = proc { |source|
      if source =~ /^.*?\.(eot|ttf|woff|svg|otf)$/
        '//mydomain.com'
      else
        ENV.fetch('CLOUDFRONT_ENDPOINT') { 'https://cloudfrontname3244d4.cloudfront.net' }
      end
    }
end
Другие вопросы по тегам