我CDN
资产托管服务于js
,css
和static images
。但我想从send_file
中排除动态生成的图片(使用CDN
),并希望浏览器直接转到我的应用网址以获取此类图片,
即。转到http://www.myapp.com/user_photos/2/images/5
但send_file网址输出为http://cdn.myapp.com/user_photo/2/images/5
原因是图像#view存在的控制器需要授权,并且由于某种原因,cookie不能一直回到应用服务器。因此,即使我想在中间使用CDN
作为动态生成图像的中继,它也会失败控制器授权(使用cancan / devise for auth)
在production.rb中我有:
config.action_controller.asset_host = "http://cdn.myapp.com/"
我在载波配置中尝试了以下操作,但它不起作用:
config.asset_host = "http://www.myapp.com/"
有关如何排除CDN排除某些路线的任何想法?
答案 0 :(得分:0)
解决方案是在production.rb
文件中设置条件,根据URL模式设置asset_host。就我而言,我希望user_photos中的任何内容都可以从与所有其他静态资产不同的资产主机提供:
config.action_controller.asset_host = Proc.new { |source|
case source
when /\/user_photos\//
APP_CONFIG['dynamic_photos_root_url']
else
APP_CONFIG['asset_cdn']
end
}
Carrier-wave配置更改没有做任何事情,所以我最终删除了它们。
CDN是亚马逊的云端网站,他们用cookie做了一些时髦的事情,即使我设置CDN的行为通过所有cookie,我也不明白。
以下讨论是确定解决方案的关键: Configure dynamic assets_host in Rails 3
我想知道是否有办法让Amazon cloudfront在缓存此映像的位置工作,并在同一用户的后续命中时,它将cookie传递给源,获取身份验证,然后将相同的缓存图像提供给浏览器