簡體   English   中英

rails 使用 S3 和 cloudfront 配置載波

[英]rails configuring carrierwave with S3 and cloudfront

我有一個 rails4 應用程序,我正在嘗試將 CDN 添加到 S3 上傳。 由於某種原因,它不起作用。

當我出於某種原因在配置中設置 cloudfront 時,它僅對屬於同一上傳者的某些圖像(不是全部)有效,並且最重要的是這些圖像已損壞。 從 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

頭像_上傳者.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

看起來您可能需要將協議添加到您的 cloudfront url:

CLOUDFRONT_URL=https://xyz.cloudfront.net

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM