我将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?
答案 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提供上传服务。