Lorsque j'exécute la commande dans le terminal dos à dos, elle ne se synchronise pas la deuxième fois. Qui est genial! Ça ne devrait pas. Mais, si j'exécute mon processus de construction et exécute aws s3 sync par programme, dos à dos, il synchronise tous les fichiers les deux fois, comme si mon processus de construction changeait quelque chose différemment la deuxième fois.

Je ne peux pas comprendre ce qui pourrait se passer. Des idées?

Mon processus de compilation est essentiellement pug source/ --out static-site/ et stylus -c styles/ --out static-site/styles/

14
Costa 21 avril 2017 à 00:07

3 réponses

Meilleure réponse

Selon cela - http://docs.aws.amazon.com /cli/latest/reference/s3/sync.html

La synchronisation S3 compare la taille du fichier et le dernier horodatage modifié pour voir si un fichier doit être synchronisé.

Dans votre cas, je soupçonne que le système de construction entraîne un horodatage plus récent même si la taille du fichier n'a pas changé?

11
Naraen 21 avril 2017 à 00:18

Cet article est un peu daté, mais je contribuerai néanmoins aux personnes qui arrivent ici via Google.

Je suis d'accord avec la réponse vérifiée. Pour ajouter un contexte supplémentaire, la fonctionnalité AWS S3 est différente de celle de Linux s3 standard de plusieurs manières. Sous Linux, un md5hash peut être calculé pour déterminer si un fichier a changé. S3 ne le fait pas, il ne peut donc déterminer qu'en fonction de la taille et / ou de l'horodatage. Pire encore, AWS ne conserve pas l'horodatage lors du transfert de toute façon, donc l'horodatage est ignoré lors de la synchronisation en local et utilisé uniquement lors de la synchronisation vers s3.

4
Gary Morris 22 janv. 2019 à 21:29

Synchronisation AWS CLI:

Un fichier local nécessitera un téléchargement si la taille du fichier local est différente de la taille de l'objet s3, la dernière heure de modification du fichier local est plus récente que la dernière heure de modification de l'objet s3, ou le fichier local n'existe pas sous le compartiment et le préfixe spécifiés.

--size-only (boolean) Fait de la taille de chaque clé le seul critère utilisé pour décider de la synchronisation de la source vers la destination.

Vous voulez l'option --size-only qui ne regarde que la taille du fichier et non la date de la dernière modification. C'est parfait pour un système de création d'actifs qui changera fréquemment la date de dernière modification, mais pas le contenu réel des fichiers (je suis confronté à cela avec des builds Webpack où des choses comme les polices ont continué à se synchroniser même si le contenu du fichier était identique). Si vous n'utilisez pas une méthode de construction qui incorpore le hachage du contenu dans le nom de fichier, il peut être possible de rencontrer des problèmes (si la construction émet un fichier de même taille mais avec un contenu différent), alors faites attention à cela.

J'ai testé manuellement l'ajout d'un nouveau fichier qui n'était pas sur le bucket distant et il est en effet ajouté au bucket distant avec --size-only.

10
Cymen 15 déc. 2018 à 23:50