我有一个rails4应用,我试图将CDN添加到S3上传。由于某种原因,它不起作用。
当我出于某种原因在配置中设置cloudfront时,它仅对属于同一上传者的某些图像(NOT ALL)有效,并且最重要的是这些图像被破坏。从S3显示的图像正常工作,但它们也应该从cloudfront提供。
我错过了什么?
通过cloudfront显示(损坏)的图像:
<%= 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显示而不是cloudfront(显示未被破坏)
<%= 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
的Gemfile
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
答案 0 :(得分:1)
您可能需要将协议添加到您的Cloudfront网址:
<td class="col-md-2" width="50" style="background-color: transparent;">
<input class="btn btn-sm btn-primary fa" id='iedit-@item.ID' type="button" value="" onclick='showedit("@(item.ID)");' />
</td>