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.
Я уже пытался:
- Добавить стеллаж-камень и изменить мой config.ru безуспешно
- Установить
after_filter
установить заголовки сервера без успеха - Создать недействительными в 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