2011-09-03 16 views
5

Ho appena aggiornato la mia app su Heroku da Rails 3.0 a 3.1 e sto cercando di rendere funzionante la pipeline delle risorse. Il problema principale è che posso leggere dal Heroku registrato il seguente tipo di linee, per ogni risorsa:Assegna pipeline durante l'aggiornamento a Rails 3.1 su Heroku

2011-09-03T16:35:28+00:00 app[web.1]: cache: [GET /assets/border-a3c571a354b9381740db48aeebfaa63a.jpg] miss 

Se ho capito bene la pipeline, questo non dovrebbe essere "miss" per ogni richiesta che faccio da un browser, ma dovrebbe essere trovato nella cache.

Leggendo i documenti Heroku è possibile trovare questa spiegazione:

Rails 3.1 provides an assets:precompile rake task to allow the compilation penalty to be paid up front rather than each time the asset is requested. If this task exists in your app we will execute it when you push new code. 

Ma come si dovrebbe che "Attività: precompilare" task essere? Ho provato a creare un progetto con rails 3.1 da zero per cercare di scoprirlo, ma non esiste un compito simile in un progetto semplice. O mi sta sfuggendo qualcosa? Come posso fare in modo che le risorse vengano trovate nella cache? Forse è solo un problema con la configurazione.

Queste sono le opzioni di mio file di configurazione di produzione:

config.serve_static_assets = false 
config.assets.compress = true 
config.assets.compile = true # If I turn this off I get a 500 error and logs say that an asset isn't compiled 

mio application.rb ha questa linea:

config.assets.enabled = true 

Grazie mille per il vostro aiuto!

+0

compilo i beni direttamente su Heroku, non inquinare il mio repository locale con un patrimonio compliled. Utilizzare il comando: heroku eseguire rake assets: precompilare –

risposta

4

mi chiedevo la stessa cosa, ma ecco un suggerimento per aiutare a capire se le risorse sono live-compilazione o no

  1. corsa rake assets:precompile localmente
  2. apportare alcune modifiche al tuo css ma non faccio eseguire nuovamente il task rake
  3. git add, impegnarsi e spingere a Heroku

Se le modifiche apportate nel passaggio 2 appaiono in poi roku, allora sai che la tua app è live-compila

Non dimenticare che ora ti occupi di http caching dato che Varnish non è più incluso in celadon, quindi devi configurare rack-cache e memcache:

Ma sì, ho trovato questo sconcertante troppo

+0

Grazie per la tua risposta, è pieno di informazioni importanti. – alvatar

1

Puoi provare con config.serve_static_assets set per true e

config.action_dispatch.x_sendfile_header = "X-Sendfile" 

aggiunto al file config/environments/production.rb?

Quando si spinge il codice su Heroku si dovrebbe vedere la precompilazione annunciata dal compilatore di slug AFAICT.

+0

"-----> Preparare l'app per la pipeline di asset Rails", ma lo stesso ha fatto prima. Ancora mancherà il cache ... – alvatar

+0

Non dovrebbe invece usare la direttiva ngnix? 'config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'' – tibbon

1

Assicurati di essere sulla Heroku "Cedar" stack. Quindi Heroku will automatically precompile your assets during slug compilation.

Nota: Ricevo ancora "errori di cache", ma non penso sia vero perché l'app non funzionerebbe se le risorse non sono state compilate.

+3

sì, ho lo stack Cedar. Se hai attivato "live compilation", lo compila ogni volta che c'è un errore di cache. In realtà, se disattivo questa opzione (con 'config.assets.compile = true'), allora non funziona affatto. – alvatar

5

Inoltre, date un'occhiata a http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets

Per precompiles di asset più veloci, è possibile caricare in parte l'applicazione impostando config.assets.initialize_on_precompile a falso in config/application.rb, sebbene in quel caso i modelli non possano vedere gli oggetti oi metodi dell'applicazione . Heroku richiede che questo sia falso

Problemi correlati