1

Ich habe eine Rails4 App und ich versuche, CDN S3-Uploads hinzuzufügen. Aus irgendeinem Grund funktioniert es nicht.Schienen konfigurieren Carrierwave mit S3 und Cloudfront

Wenn ich die Cloudfront in der Konfiguration aus irgendeinem Grund eingestellt habe, hat sie nur Auswirkungen auf einige der Bilder (NICHT ALLE), die zum selben Uploader gehören, und darüber hinaus sind diese Bilder kaputt. Bilder, die von S3 angezeigt werden, funktionieren ordnungsgemäß, außer sie sollten auch von Cloudfront aus bedient werden.

Was habe ich vermisst?

Bild, das (gebrochen) über Cloudfront angezeigt wird:

<%= 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 

Bild vom gleichen Uploader, die aus irgendeinem Grund von S3 nicht Cloudfront angezeigt (Display ist nicht gebrochen)

<%= 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 

Config :

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' 

UPDATE

Uploader Standard-Speicher:

def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
end 

Wie kann ich das ändern:

https://xyz.cloudfront.net/images/xyz.cloudfront.net/uploads/profile/avatar/3/small_thumb_3f4ff02.jpg 

dazu:

https://xyz.cloudfront.net/uploads/profile/avatar/3/small_thumb_3f4ff02.jpg 
+0

Was ist der Wert von 'ENV [ 'CLOUDFRONT_URL']'? – Codebeef

Antwort

1

Sieht aus wie Sie das Protokoll auf Ihre Cloudfront url müssen hinzufügen:

CLOUDFRONT_URL=https://xyz.cloudfront.net 
+0

Ich habe auch Juwel mit 'ENV ['CLOUFRONT_URL']' refletieren und das ist die Bereitstellung der Dateien ordnungsgemäß mit Cloudfront, also muss es etwas anderes sein. Ich denke, es könnte eine "Nebel" -Konfiguration sein. Ich habe verschiedene Edelsteine ​​und Setups gesehen und weiß nicht, welches das Beste ist. Die zwei merkwürdigen Sachen sind die URL (es gibt cloudfront URL zweimal in der 'src') und dass nur einige der Bilder von Cloudfront angezeigt werden. –

+0

Sicher, aber enthält Ihr CLOUFRONT_URL das Protokoll? – Codebeef

+0

Für die Bilder, die nicht angezeigt werden, sind sie öffentlich oder privat in S3? – Codebeef