1

我将 CarrierWave 用于图像,并将 Amazon Cloudfront 用作 CDN(没有 S3)。

问题是这样的:@user.image_url返回非 CDN URL,即使我已经相应地配置了我的资产:

  # /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
  }

如何让 CarrierWaveasset_host像使用其他资产一样使用我的 proc?

4

1 回答 1

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 提供上传。

于 2012-08-07T17:25:55.380 回答