0

我有CDN资产托管工作jscssstatic images。但我想排除动态(使用send_file)生成的图像,CDN并希望浏览器直接转到我的应用程序 URL 获取此类图像,

即去http://www.myapp.com/user_photos/2/images/5

但是 send_file URL 的输出为http://cdn.myapp.com/user_photo/2/images/5

原因是图像#view 所在的控制器需要授权,并且由于某种原因,cookie 没有一直返回到应用服务器。因此,即使我想CDN在中间使用作为动态生成图像的中继,它也无法通过控制器授权(使用 cancan/devise 进行身份验证)

在 production.rb 我有:

config.action_controller.asset_host = "http://cdn.myapp.com/"

我在载波配置中尝试了以下操作,但没有成功:

config.asset_host = "http://www.myapp.com/"

关于如何将某些路由排除在 CDN 之外的任何想法?

4

1 回答 1

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
}

载波配置更改没有做任何事情,所以我最终删除了它们。

CDN 是亚马逊的云端服务,他们对 cookie 做了一些奇怪的事情,即使我将 CDN 的行为设置为通过所有 cookie,我也无法理解。

以下讨论是找出解决方案的关键: 在 Rails 3 中配置动态 assets_host

我想知道是否有一种方法可以让 Amazon cloudfront 在缓存此图像的地方工作,并且在同一用户的后续点击中,它将 cookie 传递到源,获取身份验证,然后将相同的缓存图像提供给浏览器。

于 2013-08-01T17:57:45.533 回答