Heroku + Rails4.2:Cloudfront设置
我正在尝试为我的heroku应用程序设置Cloudfront。 文件似乎缺乏独立的立场。
以下是我遵循的步骤:
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调试器中,从此URL的cloudfront正确请求资产: http : //XXXXX.cloudfront.net/assets/application-22c7c249df1a24541d86603b0715eefe.css
但是在请求标题中,请参阅Status Code:302 Moved Temporarily
。 我想知道我是否有重定向循环以及如何调试它。
UPDATE2
谢谢大家的建议。 更多信息:
- 当我尝试从我的应用程序下载资产时,我在浏览器上重定向到主页但是使用curl我能够获得资产。 ex:curl’http://www.myapp.com/assets/application-c9a778bb55ad4152d956fd34fe6f7839.css’
- 该应用程序不使用SSL。 但是,根据@Omar的建议,我仍然将Origin Protocol Policy设置为Match Viewer
- 我尝试在浏览器上从我的应用程序下载资产,并且能够访问资产。 例如:’http://www.myapp.com/assets/application-c9a778bb55ad4152d956fd34fe6f7839.css’然而,尝试直接在cloudfront上访问资产(d1ax5oefcdtdki.cloudfront.net/assets/application-c9a778bb55ad4152d956fd34fe6f7839.css)会将其重定向到myapp。 COM
- cloudfront DS的屏幕截图:
http://sofzh.miximages.com/ruby-on-rails/Screenshot 2015-12-06 14.01.28.png?dl=0
http://sofzh.miximages.com/ruby-on-rails/2015-12-06_at_2.02_PM.png/
http://sofzh.miximages.com/ruby-on-rails/Screenshot 2015-12-06 14.05.20.png?dl=0
对于其他任何有问题调试cloudfront的人。
问题是Cloudfront缓存了重定向(因为设置错误)。 在使缓存失效后,我能够强制CF从我的应用程序中获取资产并提供服务。
当您第一次请求资产时,cloudfront会检查文件是否已缓存,例如您请求:
http://XXXXX.cloudfront.net/assets/application-22c7c249df1a24541d86603b0715eefe.css
第一次,cloudfront会给出一个缓存未命中,然后它会从rails中拉出等效路径的文件。 因此,下次请求同一文件时,它将被缓存。
为了使其工作,您需要确保正确设置所有内容。
除了在producer.rb中设置assets_host之外,没有什么可做的。 由于您已经拥有rails_12factor
gem,因此无需添加config.assets.compile = true
。 从gem的文档中可以看到它添加的静态资产“文档”的部分 。
从我认为您遇到问题的云端方面,您需要设置一些设置,让云端部门知道当缓存未命中时它如何与您的rails应用程序通信。 在云端设置中,您需要检查
Origin Domain Name
是您的rails应用程序的URL。
Match Viewer
Origin Protocol Policy
Distribution State
为Enabled
此外,还有一些其他设置可以帮助您优化内容交付缓存。