2012-03-14 15 views
17

In modalità di produzione, le rotaie non sembrano trovare risorse precompilate dalla pipeline delle risorse.Perché le rotaie non troveranno le mie risorse?

Sto usando rails 3.2.0 e ruby ​​1.9.3 in esecuzione su RVM su CentOS. Nessun server web aggiuntivo è in esecuzione insieme a questa applicazione. L'applicazione è stata aggiornata di recente solo per utilizzare la pipeline degli asset, poiché originariamente era un'app per le rails 3.0.

Dopo aver eseguito

rake assets:clean 
rake assets:precompile 

vedo il contenuto hash in/beni pubblici, come mi sarei aspettato. Gli hash alla fine dei file corrispondono a quelli che vedo nel sorgente della pagina.

Eppure in fase di esecuzione, ecco quello che vedo ogni Rails attivi tenta di servire:

Started GET "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" for 75.149.58.169 at 2012-03-14 11:42:43 -0700 

ActionController::RoutingError (No route matches [GET] "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css"): 

non mi riferisco alla cartella in cui ogni risorsa è ospitato in; tutti i riferimenti al patrimonio assomigliano questi:

//css: 
.class { 
    background: url(asset.png) no-repeat; 
} 

//erb: 
<%= image_tag "asset.png" %> 
<%= link_to "page", :class => "class" %> 

Asset conduttura impostazioni pertinenti in production.rb:

config.serve_static_assets = false 
config.assets.enabled = true 
config.assets.compress = true 
config.assets.debug = false 
config.assets.compile = false 
config.assets.digest = true 

E, infine, le impostazioni delle attività finanziarie di config/application.rb:

config.assets.enabled = true 
config.assets.version = '1.0' 

L'utente che avvia il processo del server di rotaie ha autorizzazioni di lettura, scrittura ed esecuzione su pubblico/risorse, quindi non penso che sia un problema di autorizzazioni. Ho perso una fase di configurazione?

Modifica

ho notato che non ci siano errori affermando che i beni non vengono precompilati, così ho cercato di accedere a un foglio di stile dalla pagina web aggiungendo "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" al fine del percorso host:

http://www.myapp.com"/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" 

Questo ha funzionato e il foglio di stile aperto.

+0

Correlato/duplicato: http://stackoverflow.com/questions/5760661/rails-favicon-ico-not-found –

risposta

26

Ulteriori ricercando di questo problema ceduta questo SO articolo:

application.css not being served as an asset

Sembra

config.serve_static_assets = false 

è un'impostazione non corretta finché la mia applicazione Rails non è in esecuzione dietro Apache o nginx

+0

Sono stato colto da questo. Solitamente si usa Apache ma in questa occasione si stava utilizzando Thin tramite IIS. Grazie! – kim3er

4

Ho avuto lo stesso problema, ma noto che il tuo foglio di stile punta al non impronta digitale, non memorizzato nella cache versione dei file. Se si sta utilizzando la pipeline di asset, per trarne vantaggio, è necessario utilizzare gli helper che puntano alla versione memorizzata nella cache dei file. Per fare ciò, devi incorporare erb nel tuo file css, o usare sass.

errato:

.class { 
    background: url(asset.png) no-repeat; 
} 

corretta (utilizza sass):

.class 
    background: image-url('asset.png') no-repeat 

Per ulteriori informazioni, vedere qui: http://guides.rubyonrails.org/asset_pipeline.html#coding-links-to-assets

Se non si preoccupano i problemi di prestazioni, è può cavarsela usando le versioni non memorizzate nella cache fino a quando non si aggiorna a Rails 4 o Rails 3.2.16, perché quelle versioni introducono cambiamenti di rottura che ti costringono a usare la pipeline degli asset (e s sintassi corrispondente). Se non si utilizza la nuova sintassi, le versioni non memorizzate nella cache non funzioneranno affatto sulla produzione.

+0

Ehi, grazie! Dal momento che questa domanda è stata pubblicata, tuttavia, abbiamo finito per migrare le risorse su un CDN, ma lo ricorderò per i futuri progetti Rails! – BrMcMullin

+0

Prego! : D –

Problemi correlati