Heroku + Rails4.2:云端设置
Heroku + Rails4.2 : Cloudfront setup
我正在尝试为我的 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`
None 的资产加载了。我在设置中遗漏了任何步骤吗?
更新 1:
在 chrome 调试器中,从这个 url 的云端正确请求资产:http://XXXXX.cloudfront.net/assets/application-22c7c249df1a24541d86603b0715eefe.css
然而在请求头中看到一个Status Code:302 Moved Temporarily
。我想知道我是否有重定向循环以及如何调试它。
更新2
感谢大家的建议。更多信息:
- 当我尝试从我的应用程序下载资产时,我在浏览器上重定向到主页,但使用 curl 我能够获取资产。例如:curl 'http: //www.myapp.com/assets/application-c9a778bb55ad4152d956fd34fe6f7839.css'
- 该应用程序不使用 SSL。但是我仍然根据@Omar 的建议将 Origin Protocol Policy 设置为 Match Viewer
- 我尝试在浏览器上从我的应用程序下载资产并且能够访问资产。例如:'http: //www.myapp.com/assets/application-c9a778bb55ad4152d956fd34fe6f7839.css'
但是,尝试直接在云端访问资产 (d1ax5oefcdtdki.cloudfront.net/assets/application-c9a778bb55ad4152d956fd34fe6f7839.css) 会将其重定向到 myapp.com
- cloudfront DS 的屏幕截图:
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
当您第一次请求资产时,cloudfront 会检查文件是否已缓存,例如您请求:
http://XXXXX.cloudfront.net/assets/application-22c7c249df1a24541d86603b0715eefe.css
cloudfront 第一次会出现缓存未命中,然后它将从 rails 的等效路径中提取文件。这样下次你请求同一个文件时,它就已经被缓存了。
为了使其正常工作,您需要确保所有设置都正确无误。
从 rails 方面除了在 production.rb 中设置 assets_host 之外没有什么可做的。由于您已经拥有 rails_12factor
gem,因此无需添加 config.assets.compile = true
。从 gem 的文档中,您可以在“如何”部分看到它添加服务静态资产 "the documentation"。
从我认为您面临问题的 cloudfronts 方面,您需要设置一些设置,让 cloudfront 知道它如何在缓存未命中时与您的 rails 应用程序通信。在云端设置中,您需要检查
Origin Domain Name
成为您 rails 应用的 url。
Origin Protocol Policy
到 Match Viewer
Distribution State
到 Enabled
还有一些其他设置可以帮助您优化内容交付缓存。
对于在调试云端时遇到问题的任何其他人。
问题是 Cloudfront 缓存了重定向(可能是设置错误)。使缓存无效后,我能够强制 CF 从我的应用程序中获取资产并为它们提供服务。
我正在尝试为我的 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`
None 的资产加载了。我在设置中遗漏了任何步骤吗?
更新 1:
在 chrome 调试器中,从这个 url 的云端正确请求资产:http://XXXXX.cloudfront.net/assets/application-22c7c249df1a24541d86603b0715eefe.css
然而在请求头中看到一个Status Code:302 Moved Temporarily
。我想知道我是否有重定向循环以及如何调试它。
更新2
感谢大家的建议。更多信息:
- 当我尝试从我的应用程序下载资产时,我在浏览器上重定向到主页,但使用 curl 我能够获取资产。例如:curl 'http: //www.myapp.com/assets/application-c9a778bb55ad4152d956fd34fe6f7839.css'
- 该应用程序不使用 SSL。但是我仍然根据@Omar 的建议将 Origin Protocol Policy 设置为 Match Viewer
- 我尝试在浏览器上从我的应用程序下载资产并且能够访问资产。例如:'http: //www.myapp.com/assets/application-c9a778bb55ad4152d956fd34fe6f7839.css' 但是,尝试直接在云端访问资产 (d1ax5oefcdtdki.cloudfront.net/assets/application-c9a778bb55ad4152d956fd34fe6f7839.css) 会将其重定向到 myapp.com
- cloudfront DS 的屏幕截图:
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
当您第一次请求资产时,cloudfront 会检查文件是否已缓存,例如您请求:
http://XXXXX.cloudfront.net/assets/application-22c7c249df1a24541d86603b0715eefe.css
cloudfront 第一次会出现缓存未命中,然后它将从 rails 的等效路径中提取文件。这样下次你请求同一个文件时,它就已经被缓存了。
为了使其正常工作,您需要确保所有设置都正确无误。
从 rails 方面除了在 production.rb 中设置 assets_host 之外没有什么可做的。由于您已经拥有 rails_12factor
gem,因此无需添加 config.assets.compile = true
。从 gem 的文档中,您可以在“如何”部分看到它添加服务静态资产 "the documentation"。
从我认为您面临问题的 cloudfronts 方面,您需要设置一些设置,让 cloudfront 知道它如何在缓存未命中时与您的 rails 应用程序通信。在云端设置中,您需要检查
Origin Domain Name
成为您 rails 应用的 url。
Origin Protocol Policy
到 Match Viewer
Distribution State
到 Enabled
还有一些其他设置可以帮助您优化内容交付缓存。
对于在调试云端时遇到问题的任何其他人。
问题是 Cloudfront 缓存了重定向(可能是设置错误)。使缓存无效后,我能够强制 CF 从我的应用程序中获取资产并为它们提供服务。