Rails:排除从CDN链接的图像

时间:2013-08-01 10:02:09

标签: ruby-on-rails carrierwave amazon-cloudfront

CDN资产托管服务于jscssstatic 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排除某些路线的任何想法?

1 个答案:

答案 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传递给源,获取身份验证,然后将相同的缓存图像提供给浏览器