Pipeline di Rails 3 & Assets in modalità di sviluppo/produzione
-
27-10-2019 - |
Domanda
Le risorse di precompilazione sul server di produzione sono molto lente. Così ho deciso di ricompilarli sulla macchina per lo sviluppo e di caricare risorse su Amazon S3 di jammit
. Tutto è fatto ma ho dei problemi negativi:
- Devo includere
public/assets
directory agit
controllo. Perchè sepublic/assets
La directory è vuota sul server di produzione fallisce - Se precompilo le risorse sulla macchina per lo sviluppo
application.js
Include nell'HTML come compresso e in questo modo ho un codice JS duplicato. Cambiare JS non ha alcun effetto perché precompilatoapplication.js
interrompe questo codice.
In questo modo il mio processo di sviluppo include i seguenti passaggi:
- Rimuovi le risorse precompilate se ho intenzione di cambiare JS o CSS
- Fai alcune modifiche
- Beni precompili
- Carica le risorse su S3 di
jammit-s3
- Impegna e spingi le mie modifiche, comprese le risorse al server Git
- Distribuire da Capistrano
Le mie domande sono:
- È possibile configurare l'ambiente di sviluppo non includere compresso
application.js
Se ce l'ho dentropublic/assets
directory? - È possibile configurare l'ambiente di produzione per lavorare con vuoto
public/assets
directory? Le risorse saranno solo sul server S3.
Soluzione 2
Ho risolto questo problema includendo le risorse Dir in Gitignore ed escludo un solo file - public/assets/manifest.yml
e il server di produzione funziona correttamente ora, cioè config.action_controller.asset_host = "http://assets.example.com"
lavori. Richiede solo manifest.yml
file
Altri suggerimenti
Per la domanda uno non conosco una soluzione permanente oltre alla corsa:
bundle exec rake assets:clean
Prima di tornare alla modalità di sviluppo. Sarei interessato a vedere se riesci a ignorare le risorse nello sviluppo senza disattivare l'intera pipeline di risorse.
In Production.rb c'è un'opzione per la tua seconda domanda:
# Enable serving of images, stylesheets, and JavaScripts from an asset server
config.action_controller.asset_host = "http://assets.example.com"
Dovrebbe quindi ignorare la directory delle risorse poiché si basa sull'host remoto. Spero possa aiutare.