2012-04-18 14 views
5

Sto riscontrando alcuni problemi con le risorse nella produzione : mancanti, materiale compilato nei file errati (javascript per "/ admin" viene compilato nel codice di frontend e così via). La maggior parte delle risorse proviene dai motori. Voglio eseguire il debug e ottimizzare questo.Rendere la pipeline di asset come la produzione in fase di sviluppo

Per questo, ho bisogno di precompilare, servire e non riescono a mio ambiente di sviluppo proprio come è fatto su produzione.

ho aggiunto alcune linee alla mia config/development.rb:

config.serve_static_assets = true 
    config.assets.precompile += %w(store/all.js store/all.css admin/all.js admin/all.css) # @TODO: clean up, and optimize. 
    config.assets.compile = false 

L'esecuzione di questo con rake RAILS_GROUPS=assets RAILS_ENV=development assets:precompile mi dà tutte le attività e il manifest.yml in public/.

Ma poi il server non riesce:

Sprockets::Helpers::RailsHelper::AssetPaths::AssetNotPrecompiledError in Spree/home#index 

Showing /xxxx/app/views/spree/shared/_head.html.erb where line #13 raised: 

favicon.ico isn't precompiled 

favicon.ico non è precompilato. Ma è! È lì, nella directory pubblica, in manifest.yml, e posso scaricarlo con il browser (o wget): http://localhost:3000/assets/favicon.ico.

NOTA Favicon è semplicemente la prima risorsa chiamata. Se spoglio la favicon, il problema affiora semplicemente con la risorsa successiva, che è "all.js", o, quando è spogliato, "all.css", e così via. Posso spogliarlo fino a "footer_bg.png", e poi fallirà lì. Ancora: il problema non è la favicon, ma il fatto che l'ambiente di sviluppo non veda affatto le risorse precompilate.

Che altro è necessario per ottenere sviluppo risorsa gasdotto simile a produzione?

MODIFICA: spiegazione più esplicita che la favicon non è il problema, ma solo un sintomo.

+0

Qual è lo stack dell'ambiente di produzione? Server singolo/Multi-Server, Apache/Nginx, Heroku? Stai schierando usando capistrano e usando la ricetta capistrano? Stai usando config.serve_static_assets = true in produzione? Hai provato a gestire serve_static_assets tramite apache/nginx invece che all'interno di Rails come raccomandato da Rails? – John

+0

Il mio stack di produzione è praticamente un Passeggero con scatola nera. È un sito vhost. Non sto schierando con capistrano, ma con un hook git-push && post-commit (noto anche come git-deploy). 'config.serve_static_assets = true' è disabilitato. Ho provato a servire le risorse attraverso Apache, sì. Risolve poco. Come il problema che cerco di risolvere qui, il mio ** ambiente di sviluppo ** non serve i miei asset come in produzione. – berkes

risposta

2

ho finito per l'installazione di un apache, passeggero su localhost per la risoluzione dei problemi.

Apache (potrebbe probabilmente essere qualsiasi server passeggero) a causa del servizio di asset statico. Inoltre, su localhost posso aumentare la verbosità di apache nei suoi log molto alti, offrendomi abbastanza informazioni di debug.

Passeggero per emulare la versione di rubino e il caricamento della gemma il più possibile durante la produzione.

L'esecuzione su webrick è troppo diversa, anche quando si emula il più vicino possibile, si è rivelata troppo diversa da uno stack di produzione; è per questo che non riesco a riprodurre i problemi di produzione,

Accendere l'intero stack come se fosse la produzione mi ha permesso di risolvere i problemi.Il che mi ha portato a concludere che diversi problemi stavano causando i problemi patrimoniali: un patrimonio di gemme non raccolto; un problema di autorizzazione (risorse compilate non leggibili da www-data) e alcune risorse non compilate correttamente.

0

penso che si può decidere di lasciare favicon.ico in public ...

alzabo0:~ $ rails --version 
Rails 3.2.3 
alzabo0:~ $ rails new ojoijoijo 
[...] 
     create public/404.html 
     create public/422.html 
     create public/500.html 
     create public/favicon.ico 
     create public/index.html 
     create public/robots.txt 
[...] 
+0

Forse. Ma questo è oltre il punto. Il problema non è favicon.ico, il problema è che il mio sviluppo env. non riconoscerà le risorse compilate, come voglio io. E dal momento che ho scelto di eseguire favicon attraverso la pipeline di asset (lunga storia), è il primo file che viene incluso e semplicemente un esempio di dove soffre la pipeline di asset. Se sposto la favicon fuori dalla pipeline, come suggerite, la pipeline di asset soffocherà alcune righe più in basso, su un file css o js. – berkes

0

Solo una supposizione, ma cercano di aggiungere alla vostra lista di precompilare:

config.assets.precompile += %w(store/all.js store/all.css admin/all.js admin/all.css favicon.ico) 
+0

Questo funziona davvero. Stranamente, è che in produzione questo non è necessario. E poiché questa linea è una delle cose principali che voglio pulire, correggere e ottimizzare, questa è esattamente la parte che dovrebbe essere "proprio come in produzione". – berkes

+0

strano davvero. forse in produzione, se si "rastrellano i beni: puliti" all'improvviso non funzionerà neanche lì? Come fai riferimento a favicon.ico nel tuo modello di visualizzazione? Personalmente, non utilizzo gli helper per generare il collegamento favicon.ico. Stai utilizzando favicon_link_tag? È una cosa strana, forse lasciarlo per ora e passare alla parte interessante? – pduey

+0

Si prega di notare che favicon * non è il problema *. Il problema è che il mio ambiente di sviluppo non riconoscerà le risorse quando precompilate. Favicon * è semplicemente un esempio *. Quando lascio la favicon, il problema rimane e affiorerà con il prossimo asset: un file js o css. – berkes

Problemi correlati