【问题标题】:How to configure Carrierwave to use multiple CDN CNAME urls如何配置 Carrierwave 以使用多个 CDN CNAME url
【发布时间】:2014-04-16 06:15:21
【问题描述】:

在 Rails 中,我可以从 CDN 提供资产,并设置多个 CNAMES 以同时加载。

例如我将config.action_controller.asset_host = "http://assets-%d.myappp.com" 放在config/environments/production.rb 中,然后我的资产从

http://assets-0.myapp.com
http://assets-1.myapp.com
http://assets-2.myapp.com

这很棒,并且大大增加了页面加载时间。

我的应用包含大量通过 Carrierwave 处理的用户生成图像。我想对这些图像应用相同的方法。我已经设置了 CDN,并且在 config/initializers/carrierwave.rb 我添加了以下内容:

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

现在我有两个问题:

  1. 如何确保此 CDN 仅用于生产?
  2. 如何使用多个 URL(例如 images-0.myapp、images-1.myapp 等)。 %d 方法似乎在初始化程序中不起作用。

【问题讨论】:

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


    【解决方案1】:

    我今天遇到了同样的问题并想出了这个:

    # staging
    ENV['S3_CLOUDFRONT_DOMAIN'] = "//s3.amazonaws.com/bucket"
    
    # production
    ENV['S3_CLOUDFRONT_DOMAIN'] = "//assets%d.domain.com"
    

    在你的初始化器中:

    # config/initializers/carrierwave.rb
    if ENV['S3_CLOUDFRONT_DOMAIN'] =~ /%d/
      config.asset_host = proc do |file|
        "#{ENV['S3_CLOUDFRONT_DOMAIN'] % (Zlib.crc32(file.filename) % 4)}"
      end
    else
     config.asset_host = ENV['S3_CLOUDFRONT_DOMAIN']
    end
    

    请注意,我正在为我的域使用 ENV 变量,并且我有 file.filename,它对应于我的挂载列。我没有时间找到通过帮助程序访问可安装柱的方法,所以我必须回到那个,现在它可以工作了。

    这将处理多个 CDN 端点和一个用于暂存或开发的端点。确保为您的端点提供协议或至少“//”,否则 Carrierwave 认为它是一个文件夹,并以 /images/s3.amazonaws.com/site/path/to/file.jpg 结尾

    希望这对你也有用。

    另外,我使用的是 Carrierwave 0.9.0

    【讨论】:

    • 也许您可以在设置 ENV['S3_CLOUDFRONT_DOMAIN'] = "//s3.amazonaws.com/bucket" 的位置添加信息 这对您来说可能很明显,但并非所有遇到您的答案的人。
    【解决方案2】:

    Johnkoht 的回答让我看到了载波reference docs。他们建议

    CarrierWave.configure do |config|
      config.asset_host = proc do |file|
      identifier = # some logic (note: I used "images-#{rand(3)}
      "http #{identifier}.cdn.rackspacecloud.com"
      end
    end
    

    我将它与用于载波生成的专用初始化程序结合起来并让它工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 2019-10-30
      • 1970-01-01
      • 2023-03-19
      • 2020-04-25
      • 2012-10-23
      • 1970-01-01
      相关资源
      最近更新 更多