5

最近,我们将资产转移到 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"

直到昨天,这一切都很好。经过多次搜索和思考,我没有找到解决方案。

任何想法?

4

3 回答 3

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为您网站的域名应该可以解决问题。

希望这可以帮助。

PS:直到昨天我才知道你的设置是如何工作的。:)

PPS:将备用域名 (CNAME)添加到您的 CDN 将在您想要快速丢弃通过http://xxx.cloudfront.net公开的现有分发并开始使用新分发http://yyy 的情况下为您提供帮助。云前网。如果在这种情况下使用诸如http://cdn.mydomain.net之类的备用域名,则无需更改应用程序代码库中的任何内容。

于 2013-03-15T06:18:11.830 回答
0

这是我在另一个 Stack Exchange 页面上发布的与同一主题相关的内容的副本,如果其他人有同样的问题但没有找到正确的答案,我会留下这个。

Heroku 上的 Rails 3 应用程序也有同样的问题;Font-Awesome 图标没有显示,因为我通过 Sumo CDN 运行我的资产。

有几个与此相关的回复,其中之一是在您的 application_controller 中放置一个 after_filter 以设置标头值(通过 freemanoid),但这对我不起作用,我不得不使用 Peter Marklund 建议的自定义中间件.

两种解决方案都在 Rails 3.1 版本下发布: 如何在 webrick 中设置 access-control-allow-origin 在 rails 下?

于 2014-01-21T02:14:12.030 回答
0

我使用的解决方法 - 将字体分别上传到 S3 并在存储桶上设置 cors 配置。将字体链接硬编码到 S3 字体。所有资产(字体除外)都将来自云端——您的字体将来自 S3。它丑陋 - 但它有效....

于 2014-06-25T10:09:46.013 回答