2017-08-17 70 views
6

S3 kabında barındırılan bir Yanıtla uygulamasına sahibim. Kod, yarn build kullanılarak minified edilir (bu, create-react-app tabanlı bir uygulamadır). Ben (güncellemek için main.*.js yılında altıgen eki neden olan) kodunu güncellemek, ben üzerine almak için kullanıcının bir sonraki ziyaretini gerektiğinden, index.html önbelleğe alınmasını istemiyorsanız aslaCloudFront, S3 kabında index.html'yi asla önbelleğe almaz

build 
├── asset-manifest.json 
├── favicon.ico 
├── images 
│   ├── map-background.png 
│   └── robot-icon.svg 
├── index.html 
├── js 
│   ├── fontawesome.js 
│   ├── packs 
│   │   ├── brands.js 
│   │   ├── light.js 
│   │   ├── regular.js 
│   │   └── solid.js 
│   └── README.md 
├── service-worker.js 
└── static 
    ├── css 
    │   ├── main.bf27c1d9.css 
    │   └── main.bf27c1d9.css.map 
    └── js 
     ├── main.8d11d7ab.js 
     └── main.8d11d7ab.js.map 

: build klasör şey gibi görünüyor <script src>, güncellenen koda işaret etmek için index.html değiştir.

CloudFront, ben sadece yolları dışlamak için görünebilir ve hariç "/" düzgün çalışması için görünmüyor. Kodu değiştirdiğim garip davranışlar alıyorum ve yenilemeye başladığında onu görüyorum, ancak Chrome'u bırakıp geri dönersem, bir sebepten dolayı çok eski bir kod görüyorum. İstemediğim

(CodeBuild yoluyla) her kod serbest bırakılması üzerine invalidation tetiklemek zorunda. Başka bir yolu var mı? Ben zorluklardan biri olduğunu düşünüyorum Bu React Router kullanarak bir uygulama olduğundan, hata belgeyi index.html ayarlayarak ve 403 yerine bir HTTP durumu 200 zorlayarak bazı hile yapmak zorundayım.

cevap

5

Hiç istemiyorsanız index.html, önbelleğe alınacak şekilde, yalnızca bu dosyada Cache-Control: max-age=0 başlığını ayarlayın. CloudFront, her isteğinize göre numaralı isteğinize bağlı olarak S3 grubunuzdan bir istekte bulunacak, ancak bu istenen davranışa benziyor. Daha uzun vade sürelerini ayarlayabilir ve elle CloudFront önbelleği geçersiz isteyen konum

, kendi geçersizlik yolu olarak * veya /* bir kullanabilir (Bahsettiğiniz değil / gibi). Bu, dünyanın her yerindeki tüm CloudFront kenar düğümlerinin kaynağınızdaki değişiklikleri yansıtması için 15 dakika kadar sürebilir.

+0

S3 nesnesi meta verilerinde bu üstbilgiyi eklemeye mi çalışıyorsunuz? Ve URL yoluna bakılmaksızın, index.html önbelleğe almayı asla istemiyorum. İlgili dosyaları (JS dosyaları, CSS, görüntüler) önbelleğe alma konusunda daha çok endişeliyim. – ffxsam

+0

Evet: Bu AWS belgelerinde olarak 'Sistem Tanımlı Meta' sözedilmesinden: http://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-object-metadata.html –

+2

Büyük, bu faydalı! Dizin dosyası üzerinde kopyalama yaparken 'aws s3 cp -cache-control max-age = 0' kullanmak için dağıtım sürecimi kurdum. ÇALIŞIYOR bir cazibe gibi. – ffxsam