Ich habe vor kurzem ein CDN für meine Anwendung eingerichtet, fast alles funktioniert gut, wie meine statischen Assets, meine JS und CSS.Rails image_tag nicht mit CDN Assets
Aber einige Objekt Vermögen (Bilder) halten meine S3 URL unter Verwendung der Daten, die zum Beispiel zu holen:
<%= image_tag(@listing.cover.url(:large))%>
Wird in der Produktion:
<img src="https://musicjungle.s3.amazonaws.com/listing_covers/5045/large.jpg?1484594254" class="fotorama__img" style="width: 548px; height: 548px; left: 91px; top: 0px;">
Statt mein CDN verwenden. Für die Aufzeichnung ist, hier das Stück meiner production.rb wo ich Setup die CDN:
#CDN settings
config.action_controller.asset_host = "d1bfllp5zjnl7u.cloudfront.net"
Wie ich beschrieben, alle meine anderen Vermögenswerten problemlos wiedergegeben werden, aber die immer noch die S3 verwenden. Vielleicht hängt das mit einem Attachment-Helfer zusammen, den ich habe? Ich habe geschaffen, um die Bilder der Anwendung auf die S3 zu laden, hier ist der Code:
module Shared
module AttachmentHelper
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def has_attachment(name, options = {})
# generates a string containing the singular model name and the pluralized attachment name.
# Examples: "user_avatars" or "asset_uploads" or "message_previews"
attachment_owner = self.table_name.singularize
attachment_folder = "#{attachment_owner}_#{name.to_s.pluralize}"
# we want to create a path for the upload that looks like:
# message_previews/00/11/22/001122deadbeef/thumbnail.png
attachment_path = "#{attachment_folder}/:id/:style.:extension"
if Rails.env.production?
options[:path] ||= attachment_path
options[:storage] ||= :s3
options[:s3_credentials] ||= {
:bucket => 'bucket-name',
:access_key_id => 'KEY_ID',
:secret_access_key => 'ACCESS_KEY'
}
options[:s3_permissions] ||= 'private'
options[:s3_protocol] ||= 'https'
options[:s3_headers] ||= {
'Cache-Control' => 'max-age=315576000',
'Expires' => 10.years.from_now.httpdate
}
else
# For local Dev/Test envs, use the default filesystem, but separate the environments
# into different folders, so you can delete test files without breaking dev files.
options[:path] ||= ":rails_root/public/system/attachments/#{Rails.env}/#{attachment_path}"
options[:url] ||= "/system/attachments/#{Rails.env}/#{attachment_path}"
end
# pass things off to paperclip.
has_attached_file name, options
end
end
end
end