Heroku + CDN Cloudfront +字体 - Firefox错误

时间:2013-03-14 15:37:08

标签: firefox heroku cors amazon-cloudfront

最近,我们将资产转移到了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 个答案:

答案 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。 它的丑陋 - 但它的作用......