rails 使用 S3 和云端配置 carrierwave
rails configuring carrierwave with S3 and cloudfront
我有一个 Rails4 应用程序,我正在尝试将 CDN 添加到 S3 上传。由于某种原因,它不起作用。
当我出于某种原因在配置中设置云端时,它仅对属于同一上传者的一些图像(不是全部)有影响,并且最重要的是这些图像已损坏。从 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
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
看起来您可能需要将协议添加到云端 url:
CLOUDFRONT_URL=https://xyz.cloudfront.net
我有一个 Rails4 应用程序,我正在尝试将 CDN 添加到 S3 上传。由于某种原因,它不起作用。
当我出于某种原因在配置中设置云端时,它仅对属于同一上传者的一些图像(不是全部)有影响,并且最重要的是这些图像已损坏。从 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
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
看起来您可能需要将协议添加到云端 url:
CLOUDFRONT_URL=https://xyz.cloudfront.net