2014-04-20 8 views
5

Sto testando la mia app Rails 4 nell'ambiente di produzione sul mio localhost: 3000 utilizzando il server Webrick integrato. Quando eseguo RAILS_ENV=production bundle exec rake assets:precompile, le risorse vengono ricostruite in pubblico e il manifest viene ricostruito, ma le pagine vengono ancora pubblicate con i precedenti nomi di risorse.Come si ottiene il server Rails per aggiornare le risorse precompilate?

Il riavvio del server delle rotaie fa apparire le nuove risorse. Esiste un modo meno estremo per raggiungere questo obiettivo e come si comporterà quando lo porto al mio server di produzione con Phusion Passenger. Non voglio davvero riavviare Apache per mettere in moto le mie risorse.

+0

Is Fingerprinting abilitato per beni compilati? –

+0

Sì, le risorse compilate sono rilevate con le impronte digitali. La configurazione è predefinita Rails 4 tranne che 'config.serve_static_assets = true' che è necessario per rendere Webrick al servizio di asset da'/public', 'config.assets.digest = true' è impostato. Le risorse hanno nomi come 'application-01d7312dee865ebe9d525b15f2fbe7f0.css', questo è il valore che si trova nell'intestazione della pagina. Il problema è che la vecchia versione è ancora in uso dopo che ne è stata costruita una nuova. –

+0

Versione precedente significa che hai cambiato i contenuti? Se non hai modificato il contenuto delle risorse, la versione precompilata sarà la stessa di quella precedente e se la cambierai un po ', l'impronta digitale cambierà e l'app richiederà la nuova solo quando avrai configurato 'config. assets.digest = true'. –

risposta

3

Se non è stato modificato il contenuto delle risorse, la versione precompilata sarà la stessa di quella precedente. Se lo cambi anche un po ', l'impronta digitale cambierà e l'app richiederà il nuovo solo come hai impostato config.assets.digest = true.

In ogni caso un altro lavoro intorno sarebbe:

basta eseguire:

rake assets:clean 

e poi,

rake assets:precompile 

Questo rende tutto in cantiere risorsa per essere ricostruito e servire fresco.

Rails cancella automaticamente la cache per ogni singolo file quando viene modificato il suo contenuto.

Se una di queste non ha funzionato, prova come di seguito:

config.serve_static_assets = true in config/ambienti/production.rb

config.serve_static_assets configura Rails stesso per servire beni statici. Il valore predefinito è true, ma nell'ambiente di produzione viene disattivato poiché il software server (ad esempio Nginx o Apache) utilizzato per eseguire l'applicazione deve invece servire risorse statiche. A differenza dell'impostazione predefinita, imposta su true quando è in esecuzione (assolutamente sconsigliato!) O prova la tua app in modalità produzione usando WEBrick. Altrimenti non sarà possibile utilizzare la memorizzazione nella cache della pagina e le richieste di file che esistono regolarmente nella directory pubblica raggiungeranno comunque l'app Rails.

Rif: http://guides.rubyonrails.org/configuring.html#rails-general-configuration

Speranza che aiuta :)

+0

Grazie per la risposta, ma, naturalmente, ho modificato il contenuto, e ho provato entrambi gli asset 'rake assets: clean' e' rake assets: clobber' e 'serve_static_assets = true'. Ho letto quasi tutte le guide online alla ricerca di una risposta prima di postare qui. Penso che questo potrebbe effettivamente essere un qualche tipo di problema di cache. –

+0

@PeterWooster Hai provato a cancellare il contenuto di 'public/assets' manualmente per vedere cosa succede? – roshiro

+0

@roshiro eliminare pubblico/risorse rende il sito simile al 1996, nessuno stile non javascript. –

1

abbiamo dovuto affrontare lo stesso problema in cui i vecchi beni sono stati serviti anche dopo aver provato le attività rake: pulita o beni: clobber e alla fine riavvio del server potrebbe risolvere il problema. Il colpevole nel nostro caso era un unicorno. Mentre distribuiamo la nostra app per i binari usando mina e mina-unicorn, eseguivamo i rake asset: clobber, poi compilato le risorse e quindi riavviato l'unicorno alla fine. In questo modo il maestro dell'unicorno non viene mai fermato e continua a mostrare vecchie risorse. Quindi, abbiamo modificato il nostro script di distribuzione di mina e invece di riavviare unicorno, abbiamo interrotto l'unicorno e l'abbiamo riavviato. Questo ha risolto il problema.Così, i passaggi chiave sono

applicazione

  • beni corsa rastrello

    1. Distribuzione: clobber beni rastrello

    2. Run: precompilare

    3. fermata unicorno

    4. Iniziamo unicorno

    Questo elimina il concetto di tempo di fermo zero, ma questa è una soluzione migliore rispetto al riavvio del server.

    Capisco che si utilizza passeggero ma questa informazione può essere utile per gli altri

  • Problemi correlati