11

Sto provando a configurare Cloudfront per la mia app heroku. The documentation sembra mancare di essere indipendente.Heroku + Rails4.2: Configurazione Cloudfront

qui sono i passi che ho seguito:

1. Setup Cloudfront in AWS console 
2. Added cloudfront domain name to production.rb `config.action_controller.asset_host = 'XXXX.cloudfront.net'` 
3. Set `config.assets.compile = true` in production.rb 
4. Verified AWS_SECRET_ACCESS_KEY is correct in heroku config 
5. I have added `gem 'rails_12factor', group: :production` 

Nessuno dei beni caricare più. Qualche passaggio che mi manca nel setup?


Update1:

Nel debugger Chrome l'attività è correttamente richiesto da CloudFront da questo URL: http://XXXXX.cloudfront.net/assets/application-22c7c249df1a24541d86603b0715eefe.css

Tuttavia nell'intestazione della richiesta vedere un Status Code:302 Moved Temporarily. Mi chiedo se ho un ciclo di reindirizzamento e come posso eseguire il debug.

Update2

Grazie a tutti per i suggerimenti. Alcune ulteriori informazioni:

  1. Quando provo a scaricare il bene della mia app, ottengo un redirect alla home page sul browser, ma utilizza ricciolo io sono in grado di ottenere il bene. ex: curl 'http: //www.myapp.com/assets/application-c9a778bb55ad4152d956fd34fe6f7839.css'
  2. L'app non usa SSL. Tuttavia, ho ancora impostato il criterio del protocollo di origine in Match Viewer come da suggerimenti di @ Omar
  3. Ho provato a scaricare l'asset dalla mia app sul browser e sono in grado di accedere alle risorse. ex: 'http: //www.myapp.com/assets/application-c9a778bb55ad4152d956fd34fe6f7839.css' Tuttavia, provare ad accedere alle risorse direttamente su cloudfront (d1ax5oefcdtdki.cloudfront.net/assets/application-c9a778bb55ad4152d956fd34fe6f7839.css) reindirizza a myapp .com
  4. Screenshots per DS CloudFront:

https://www.dropbox.com/s/bkg480d4it6zl2r/Screenshot%202015-12-06%2014.01.28.png?dl=0

http://glui.me/?i=7ah73hffrhvmpt7/2015-12-06_at_2.02_PM.png/

https://www.dropbox.com/s/dd4wwgm3md8w7qn/Screenshot%202015-12-06%2014.05.20.png?dl=0

+0

Una cosa che ho fatto è stato impostato in modo da utilizzare il protocollo URL relativi, come '// xxx.cloudfront.net'. Potrebbe essere necessario espirare anche i beni facendo urtare il numero di versione della risorsa in 'assets.rb' se si utilizza Rails 4. – CWitty

+0

Hai provato a recuperare le risorse da S3 direttamente solo per vedere cosa succede? – Vidya

+0

@Vidya Non sto usando S3 per la memorizzazione delle risorse. Le sue poche immagini e css, JS nella cartella degli asset Rails al momento. Devo impostare qualcosa in S3? – codeObserver

risposta

3

Per chiunque abbia problemi di debug di cloudfront.

Il problema era che Cloudfront aveva reindirizzamenti memorizzati nella cache (probabilmente un errore di configurazione). Dopo aver invalidato la cache, sono riuscito a forzare CF a recuperare le risorse dalla mia app e a servirle.

enter image description here

1

Quando si richiede il bene per la prima volta, i controlli CloudFront se il file viene memorizzato nella cache o meno così per esempio si richiede:

http://XXXXX.cloudfront.net/assets/application-22c7c249df1a24541d86603b0715eefe.css

per la prima CloudFront volta darà una miss cache e quindi estrarrà il file dal percorso equivalente dai binari. In modo che la prossima volta che si richiede lo stesso file, sarà già memorizzato nella cache.

Per fare in modo che funzioni, è necessario assicurarsi che tutto sia configurato correttamente.

Dal lato delle rotaie non c'è molto da fare se non impostare l'host_resocietà in production.rb. Poiché hai già la gemma rails_12factor, non è necessario aggiungere lo config.assets.compile = true. Dalla documentazione della gemma puoi vedere nella sezione di come aggiunge le risorse statiche "the documentation".

Dal lato del cloudfruit è dove penso che ci si trova di fronte a un problema, è necessario impostare alcune impostazioni per far sapere a Cloudfront come può comunicare con l'app per i binari quando manca la cache. Nelle impostazioni del cloudfront è necessario controllare

Origin Domain Name come l'indirizzo della propria app.

Origin Protocol Policy a Match Viewer

Distribution State a Enabled

Inoltre ci sono alcune altre impostazioni là che possono aiutare a ottimizzare il caching di distribuzione di contenuti.

+0

Grazie! Omar. Tutto è già impostato come hai menzionato. Tranne "Match Viewer" per la politica del protocollo Origiin. Tuttavia dal momento che non abbiamo ancora abilitato SSL, probabilmente non importa. Qualche altro suggerimento? – codeObserver

+0

Ok visto che queste impostazioni non funzionano, dobbiamo verificare se i binari stanno ancora servendo le risorse statiche per assicurarci che il cloudfront possa memorizzarli nella cache. Quindi voglio che tu provi a richiedere la risorsa dalla tua applicazione invece di cloudfront.net usa il tuo url –

+0

E prova a precompilare le risorse nella produzione env manualmente –

Problemi correlati