我从Google pagespeed工具收到错误,指出没有为我的资产指定缓存过期。
我通过cloudfront服务断言,我的网站(Ruby on Rails)托管在Heroku上
https://www.driverhunt.com/…9a42dc64767309bbb76af8a1eaef10b3c0cb.css (expiration not specified)
https://www.driverhunt.com/…74901ff9e954e9fca26f71542e8fc8d807684.js (expiration not specified)
https://www.driverhunt.com/…ad7b9e065ed95559bdf1c426bc94834f09e0.jpg (expiration not specified)
首先,它似乎不是由云端服务的。第二:
这是一个云端问题,一个heroku问题,还是一个rails问题?它可以以编程方式解决,还是我需要摆弄heroku / cloudfront设置?
答案 0 :(得分:3)
设置回复标题
要启用浏览器缓存,您必须设置Cache-Control和Expires响应标头。
调试提示
要查看现有的缓存设置,请使用浏览器的调试程序。对于Chrome,在应用的任何页面上,打开调试器并查看:
了解代码更改会产生什么影响非常重要。按原样在您的应用上运行此操作并获取基线响应标头。
设置回复标题
当您有权访问服务器配置文件时,在Linux上运行Apache或Nginx的设置缓存很简单。但根据我的经验,Heroku不允许您直接修改服务器配置文件。
如果没有在服务器上修改.htaccess或nginx.conf的功能,您有2个选项:
1 - 在控制器级别为您的rails应用实施缓存,例如:
def show
@company = Company.find(params[:id])
expires_in 3.minutes, :public => true
# ...
end
这是一个公认的可怕解决方案。
2 - Heroku提供的另一个选项是使用Rack :: Cache(Memcachier Heroku附加组件)进行HTTP缓存。我没有这方面的经验,所以没有评论。
<强>结论强>
Heroku提供了一个美妙而简单的部署环境,但为了提供这种简单性,他们已经锁定了配置。我使用Heroku在测试模式下开发和部署应用程序,但转移到VPS,我可以实现服务器端优化,例如缓存以启动应用程序。
P.S。解决问题的CDN部分:由于是您的服务器设置响应标头,我不认为CDN配置会影响缓存。
答案 1 :(得分:0)
您的资产通过您的rails应用程序提供。相关设置为config.action_controller.asset_host
,应将其设置为指向您的Cloudfront分配,例如
config.action_controller.asset_host = '//d123467890.cloudfront.net'
这假设您的Cloudfront分配已配置为您的资产提供服务(例如,来自由asset_sync填充的存储区)