将Carrierwave与Cloudfront一起使用

时间:2012-07-06 00:59:32

标签: ruby-on-rails carrierwave

我将CarrierWave用于图像,将Amazon Cloudfront用作CDN(不带S3)。

问题是:@user.image_url之类的东西会返回非CDN网址,即使我已相应地配置了我的资源:

  # /config/environments/production.rb
  config.action_controller.asset_host = Proc.new { |source, request|
    if ['jpg','jpeg','png','gif','bmp'].include?(source.split('.').last)
      unless request.ssl?
        "http://cdn.domain.com"
      else
        "https://ge95v2x8h9t3.cloudfront.net"
      end
    end
  }

如何使CarrierWave像其他资产一样使用我的asset_host proc?

1 个答案:

答案 0 :(得分:1)

您可以将carrierwave配置为使用自述文件中记录的自定义asset_host(config.fog_host ...)。虽然没有记录,但您也可以使用Proc - 或响应的任何内容:call - 来确定运行时的字符串:

https://github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/storage/fog.rb#L107

我不确定是否可以直接将config.fog_host指向Rails'config.asset_host,但我确信必须有一种方法来获取它 - 即使你有使用非公共接口。虽然,我不知道在开发过程中会有多大帮助...您可能希望从localhost提供资源,并从Cloudfront提供上传服务。