【发布时间】:2016-07-23 20:36:18
【问题描述】:
我有一个 rails4 应用程序,我正在尝试将 CDN 添加到 S3 上传。由于某种原因,它不起作用。
当我出于某种原因在配置中设置 cloudfront 时,它仅对属于同一上传者的一些图像(不是全部)有影响,而且最重要的是,这些图像已损坏。从 S3 显示的图像可以正常工作,但它们也应该从云端提供。
我错过了什么?
通过云端显示(损坏)的图像:
<%= image_tag current_user.avatar.url(:small_thumb), class: 'navbar-avatar', alt: "#{current_user.first_name}'s_avatar", title: "#{current_user.first_name}'s avatar" %>
https://xyz.cloudfront.net/images/xyz.cloudfront.net/uploads/profile/avatar/3/small_thumb_3f4ff02.jpg
来自同一上传者的图像由于某种原因从 S3 而非云端显示(显示未损坏)
<%= image_tag post.user.avatar.url(:base_thumb), class: 'post-avatar' %>
https://eaxmple.s3.amazonaws.com/uploads/profile/avatar/10/base_thumb_john_smith.png
配置:
CarrierWave.configure do |config|
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'],
aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
}
config.fog_directory = ENV['S3_BUCKET_NAME']
config.fog_attributes = { 'Cache-Control' => "max-age=#{365.day.to_i}" }
config.asset_host = ENV['CLOUDFRONT_URL']
end
avatar_uploader.rb
if Rails.env.production?
storage :fog
else
storage :file
end
宝石文件
gem 'carrierwave', '~> 0.10.0'
gem 'fog', '~> 1.34.0'
gem 'mini_magick', '~> 4.3.3'
更新
上传者默认存储:
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
我该如何更改:
https://xyz.cloudfront.net/images/xyz.cloudfront.net/uploads/profile/avatar/3/small_thumb_3f4ff02.jpg
到这里:
https://xyz.cloudfront.net/uploads/profile/avatar/3/small_thumb_3f4ff02.jpg
【问题讨论】:
-
ENV['CLOUDFRONT_URL']的值是多少?
标签: ruby-on-rails amazon-web-services amazon-s3 carrierwave amazon-cloudfront