最近,我们将资产转移到了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"
这直到昨天都很顺利。经过多次搜索和反思,我还没有找到解决方案。
有什么想法吗?
答案 0 :(得分:7)
我没有使用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
替换为您网站的域名可以解决问题。
希望这有帮助。
P.S。:直到昨天我还不确定你的设置是如何工作的。 :)
PPS:将备用域名(CNAME)添加到CDN将帮助您快速放弃在http://xxx.cloudfront.net上公开的现有分发并开始使用新分发的情况http://yyy.cloudfront.net。如果在这种情况下使用备用域名,例如http://cdn.mydomain.net,则无需更改应用程序代码库中的任何内容。
答案 1 :(得分:0)
这是我在另一个与同一主题相关的Stack Exchange页面中发布的内容的副本,我将其离开,以防其他人遇到相同的问题,但没有找到正确的答案。
我在Heroku上使用Rails 3应用程序遇到了同样的问题; Font-Awesome图标没有显示,因为我通过Sumo CDN运行我的资产。
有几个与此相关的回复,其中一个是在你的application_controller中设置一个after_filter来设置标题值(通过freemanoid),但这对我不起作用,我不得不使用建议的自定义中间件作者:Peter Marklund。
这两个解决方案都在Rails 3.1版本下发布: How to set access-control-allow-origin in webrick under rails?
答案 2 :(得分:0)
我使用过的解决方法 - 将字体分别上传到S3并在存储桶上设置cors配置。硬编码S3字体的字体链接。 所有资产(字体除外)都来自cloudfront - 您的字体将来自S3。 它的丑陋 - 但它的作用......