2017-06-28 5 views
0

J'essaie de configurer paperclip avec cloudfront et mes URL ne reviennent pas avec le bon chemin ou domaine.Configuration Paperclip avec cloudfront

Voici ma config paperclip:

s3_cr

edentials: { 
     access_key_id: ENV.fetch("S3_ACCESS_KEY"), 
     secret_access_key: ENV.fetch("S3_SECRET"), 
     bucket: ENV.fetch("S3_BUCKET"), 
    }, 

    storage:  :s3, 
    url:   ':s3_alias_url', 
    s3_host_alias: "xxxx.cloudfront.com", 
    s3_headers:  { "Cache-Control" => "max-age=31557600" }, 
    s3_protocol: "https", 
    path:   ":rails_root/public/spree/products/:id/:style/:basename.:extension", 
    default_url: "/spree/products/:id/:style/:basename.:extension", 
    default_style: "product", 

Tous mes urls reviennent en utilisant l'URL par défaut ... est ce droit?

Dans le modèle lui-même, j'ai quelques configs que je m'inquiète peut-être en remplaçant le :s3_alias_url. Est-ce possible?

class Image < Asset 
    validate :no_attachment_errors 

    has_attached_file :attachment, 
         styles: { mini: '48x48>', small: '100x100>', product: '240x240>', large: '600x600>' }, 
         default_style: :product, 
         url: '/spree/products/:id/:style/:basename.:extension', 
         path: ':rails_root/public/spree/products/:id/:style/:basename.:extension' 

Qu'est-ce que cela fait réellement?

Mes questions principales sont: que se passe-t-il lorsque nous sauvegardons une image dans le modèle? Les urls sont-ils déterminés alors? Ou sont-ils déterminés lorsque nous essayons d'aller chercher la pièce jointe? Je suppose que lorsque nous associons une pièce jointe à une image, elle est téléchargée sur s3? Mais quand nous essayons d'aller chercher la pièce jointe, nous essayons d'abord de frapper le cdn cloudfront? Que se passe-t-il?

Répondre

0

Je vois quelques problèmes qui n'impliquent pas cloudfront. Je n'ai pas beaucoup utilisé cloudfront moi-même, mais j'ai servi des objets S3 en utilisant un CName, et le concept semble être similaire.

Dans votre fichier de configuration vous avez

url:   ':s3_alias_url', 
s3_host_alias: "xxxx.cloudfront.com", 

Ce qui est correct en termes de mise en place de paperclip pour une utilisation avec AWS. Qu'est-ce qui se passe ici, c'est que votre URL cherche votre s3_host_alias comme l'emplacement pour commencer votre chemin, lorsque vous affichez des images.

Cependant, lors du téléchargement, vous allez dans le compartiment (dans vos informations d'identification) et placez un objet dans le chemin (donc nom_base \ chemin \ vers \ fichier.jpg).

Toutes mes URLs reviennent en utilisant l'URL par défaut ... est-ce exact?

Oui. Sorte de.

Ce n'est pas ce que vous voulez faire, mais c'est ce que vous faites. Dans votre modèle d'image, vous définissez votre url: à /spree/products/:id/:style/:basename.:extension et c'est également exactement ce que vous avez dans votre default_url: dans le fichier de configuration.

Donc, il est difficile de dire pourquoi vous obtenez cette réponse. Dans la plupart des cas, vous voulez que l'image default_url: s'affiche si aucune image n'est jointe. Un peu comme une page 404, mais pour les images. Cela devrait se situer à un chemin statique que vous savez que vous pouvez atteindre, même si s3 tombe en panne (ce qui n'est arrivé qu'une seule fois, d'après mon expérience).

Si vous modifiez cela, je peux ajouter plus d'informations pour faire face à votre problème spécifique, faites-moi savoir si vous êtes toujours en train de cliquer sur le chemin par défaut, ou l'url.

(Remarque: Cette image ne s'affiche que si vous n'avez pas de pièce jointe. Elle ne s'affichera pas/ne s'affichera pas lorsque vous joignez une image, mais elle n'existe pas à l'endroit voulu. de s3 qui a été trouvé sur le chemin, il vérifie.)

Je m'inquiète peut-être en remplaçant le: s3_alias_url. Est-ce possible?

Oui. C'est ce qui se passe avec votre URL dans le modèle, il est dit de vérifier le même chemin que le chemin par défaut. Je voudrais aussi supprimer :rails_root de votre chemin. Cela aidera, principalement parce que rails_root essaie d'aller à un emplacement sur votre ordinateur, et dit à votre chemin s3 pour construire un chemin de cet emplacement. Cela peut être gênant (par exemple, une clé de s3 pourrait alors apparaître et ressembler à/C:/MyDocuments/Sites/MySite/public/fête/produits // original/.... Il obtient brut.)

Qu'est-ce que cela fait réellement?

Je ne comprends pas à quelle partie cela fait référence, mais je répondrai volontiers si vous me dites à quoi cela fait référence. Mes questions principales sont: que se passe-t-il lorsque nous sauvegardons une image dans le modèle? Lorsque vous enregistrez une image, vous définissez une clé pour un objet s3 et chargez une image dans votre compartiment s3. cette clé est composée de votre seau et de votre chemin, et il est à noter que cette URL est spécifiquement utilisée pour la récupération de vos images. Les modifications apportées à l'URL après le téléchargement d'un fichier changeront à l'endroit où trombone recherche votre image.

Les URL sont-elles déterminées ensuite? Ou sont-ils déterminés lorsque nous essayons d'aller chercher la pièce jointe?

Les URL sont construites lorsque vous téléchargez une image, cependant, lorsque vous faites référence à une image, vous devriez être en mesure de dire quelque chose comme img_tag src="image.attachment" et il devrait créer une URL pour vous de regarder. (Ceci est difficile à expliquer sans savoir ce que vous avez à votre avis).

Je suppose que lorsque nous associons une pièce jointe à une image, elle est téléchargée sur s3? Oui Mais lorsque nous essayons d'aller chercher la pièce jointe, nous essayons d'abord d'atteindre le cloudfront cdn? Que se passe-t-il?

Le téléchargement utilise votre seau: trouvé dans les informations d'identification, le téléchargement (ou écran), il utilise l'URL construite à partir url: et path: