【问题标题】:Rails: Excluding images from being linked from CDNRails:从 CDN 链接中排除图像
【发布时间】:2013-08-02 04:36:16
【问题描述】:

我有 CDNjscssstatic images 工作的资产托管。但我想从CDN 中排除动态生成的图像(使用send_file),并希望浏览器直接访问我的应用程序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 之外的任何想法?

【问题讨论】:

  • 奇怪它应该开箱即用奇怪只是尝试覆盖url方法

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


【解决方案1】:

解决方案是在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 是 Amazon 的云端服务,他们对 cookie 做了一些奇怪的事情,即使我将 CDN 的行为设置为通过所有 cookie,我也无法理解。

接下来的讨论是找出解决方案的关键: Configure dynamic assets_host in Rails 3

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

【讨论】:

    猜你喜欢
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    相关资源
    最近更新 更多