在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"
现在我有两个问题:
%d
方法似乎不适用于初始化程序。答案 0 :(得分:5)
我今天遇到了同样的问题并提出了这个问题:
# 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
答案 1 :(得分:1)
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
我将它与用于载波产生的专用初始化器结合起来并使其正常工作