gpt4 book ai didi

ruby-on-rails - 如何配置 Carrierwave 以使用多个 CDN CNAME url

转载 作者:行者123 更新时间:2023-12-04 06:34:09 25 4
gpt4 key购买 nike

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

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

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方法似乎在初始化程序中不起作用。

最佳答案

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

# 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 端点和一个端点以用于暂存或开发。确保为您的端点提供协议(protocol)或至少“//”,否则 Carrierwave 认为它是一个以/images/s3.amazonaws.com/site/path/to/file.jpg 结尾的文件夹

希望这对你也有用。

此外,我正在使用 Carrierwave 0.9.0

关于ruby-on-rails - 如何配置 Carrierwave 以使用多个 CDN CNAME url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22345983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com