Heroku + Rails4.2:Cloudfront设置

时间:2015-12-02 00:09:19

标签: ruby-on-rails amazon-web-services heroku cdn amazon-cloudfront

我正在尝试为我的heroku应用设置Cloudfront。 The documentation似乎缺乏独立的立场。

以下是我遵循的步骤:

 1. Setup Cloudfront in AWS console
 2. Added cloudfront domain name to production.rb `config.action_controller.asset_host = 'XXXX.cloudfront.net'`
 3. Set `config.assets.compile = true` in production.rb
 4. Verified AWS_SECRET_ACCESS_KEY is correct in heroku config
 5. I have added `gem 'rails_12factor', group: :production`

资产不再加载。我在设置中缺少的任何步骤?

UPDATE1:

在Chrome调试器中,从此网址正确地从云端请求资产:http://XXXXX.cloudfront.net/assets/application-22c7c249df1a24541d86603b0715eefe.css

但是在请求标头中,请参阅Status Code:302 Moved Temporarily。我想知道我是否有重定向循环以及如何调试它。

UPDATE2

感谢大家的建议。更多信息:

  1. 当我尝试从我的应用程序下载资产时,我在浏览器上重定向到主页,但使用curl我能够获得资产。 ex:curl' http://www.myapp.com/assets/application-c9a778bb55ad4152d956fd34fe6f7839.css'
  2. 该应用不使用SSL。但是,根据@Omar的建议
  3. ,我仍然将Origin Protocol Policy设置为Match Viewer
  4. 我尝试在浏览器上从我的应用程序下载资产,并且能够访问资产。例如:http://www.myapp.com/assets/application-c9a778bb55ad4152d956fd34fe6f7839.css' 但是,尝试直接在cloudfront上访问资产(d1ax5oefcdtdki.cloudfront.net/assets/application-c9a778bb55ad4152d956fd34fe6f7839.css)会将其重定向到myapp.com
  5. Cloudfront DS的屏幕截图:
  6. https://www.dropbox.com/s/bkg480d4it6zl2r/Screenshot%202015-12-06%2014.01.28.png?dl=0

    http://glui.me/?i=7ah73hffrhvmpt7/2015-12-06_at_2.02_PM.png/

    https://www.dropbox.com/s/dd4wwgm3md8w7qn/Screenshot%202015-12-06%2014.05.20.png?dl=0

2 个答案:

答案 0 :(得分:3)

对于在调试cloudfront时遇到问题的其他人。

问题是Cloudfront缓存了重定向(因为设置错误)。在使缓存失效后,我能够强制CF从我的应用程序中获取资产并提供服务。

enter image description here

答案 1 :(得分:1)

首次请求资产时,cloudfront会检查文件是否已缓存,例如您请求:

  

http://XXXXX.cloudfront.net/assets/application-22c7c249df1a24541d86603b0715eefe.css

首次使用cloudfront会导致缓存未命中,然后它会从rails中获取等效路径的文件。因此,下次请求同一文件时,它将被缓存。

为了使其正常工作,您需要确保正确设置所有内容。

除了在production.rb中设置assets_host之外,没有什么可做的。由于您已拥有config.assets.compile = true gem,因此无需添加Origin Domain Name。从gem的文档中,您可以在它添加的静态资产"the documentation"添加的部分中看到。

从我认为您遇到问题的云端方面,您需要设置一些设置,让云端端口知道当缓存未命中时它如何与您的rails应用程序通信。在Cloudfront设置中,您需要检查

Origin Protocol Policy成为您的rails应用的网址。

Match ViewerDistribution State

Enabled至{{1}}

此外还有一些其他设置可以帮助您优化内容交付缓存。