2012-11-03 3 views
7

Uso il carrierwave per consentire agli utenti di caricare immagini con una capacità di ritaglio dopo il caricamento, il problema è che le versioni vengono create e CDN le cattura istantaneamente che quando gli utenti ritagliano non lo fanno vedere le modifiche perché la cache di Cloudfront deve essere invalidata e richiede un tempo discreto per aggiornarsi autonomamente.Invalidazione della cache CDN (Cloudfront) utilizzando Carrierwave

Ho pensato che mettere i numeri di versione sui nomi di file potrebbe essere un buon modo per invalidare la cache, come ottenerlo utilizzando Carrierwave?

E questo è l'approccio migliore?

+0

Come viene eseguito il ritaglio? Attraverso Rmagick tramite CarrierWave? – deefour

+0

Il ritaglio funziona senza problemi, utilizza MiniMagick e posso visualizzare le immagini ritagliate sul server (non attraverso il CDN) – Ryan

+0

Quello che sto chiedendo è che stai facendo il ritaglio indipendentemente dal processo di caricamento di CarrierWave? – deefour

risposta

14

ho avuto lo stesso problema con cloudflare

qui la mia soluzione hacker: mettere il timestamp updated_at in un params. Dovrebbe funzionare con tutte le CDN

class AssetUploader < CarrierWave::Uploader::Base 

    def url(options={}) 
    super.split("?v=")[0]+"?v=#{model.updated_at.to_time.to_i}" rescue super 
    end 

end 
+1

"hackish", ma in realtà non è un modo pulito per farlo? –

+0

Funziona! Ma non capisco. A cosa serve questo parametro "v"? Cosa succede dietro le quinte? Grazie! –

+0

Funzionava perfettamente! Il problema ora è che ho iniziato a usare carrierwave-backgrounder e non funzionerà più. Qualche intuizione? –

7

Per far funzionare URL trucco su cloudfront CDN, basta ricordarsi di abilitare stringa di query nella vostra distribuzione. Vai alla scheda comportamento e abilita "inoltra stringhe di query".

+0

trascorso un paio d'ore a capire cosa c'è che non va finché non ho letto la tua risposta. Grazie mille! – Sbbs