2013-10-05 8 views
11

Ho un problema con la mia applicazione di rotaie (Rails 4.0.0.rc2, ruby ​​2.0.0p195).Heroku non serve immagine di sfondo, localhost fa?

Il comportamento è strano: My localhost mostra correttamente l'immagine di sfondo, Heroku no.

Nei registri Heroku posso vedere il seguente errore:

ActionController::RoutingError (No route matches [GET] "/assets/piano.jpg"): 

ho creato l'immagine di sfondo inserendo il seguente codice nel mio custom.css.scss:

E io sto attivando questo con il seguente codice, che ho sulla mia pagina statica:

<body class="full"> 
.... 
</body> 

Ho già la gemma in esecuzione in produzione:

group :production do 
    gem 'pg' 
    gem 'rails_12factor' 
end 

In production.rb ho impostato la seguente impostazione a true:

config.serve_static_assets = true 

Tuttavia, l'immagine non viene mostrato. Mi puoi aiutare?

+0

http://stackoverflow.com/questions/15257555/how-to-reference-images-in-css-within-rails-4 Si può fare riferimento a questo domanda. –

+0

Sì. Tuttavia, il problema non è basato sul riferimento che ho scelto! Ha a che fare con la precompilazione delle risorse. – Alex

risposta

12

ho trovato la soluzione per il problema di me stesso:

RAILS_ENV=production bundle exec rake assets:precompile 

Dopo l'esecuzione di questo comando in mia console, il quadro era mostrato correttamente.

precedenza avevo solo cercato di eseguire:

rake assets:precompile 

Che da solo non ha aiutato. Devi indirizzare l'ambiente di produzione nel tuo comando.

Spero che questo serva da riferimento per altri utenti.

25

assicuratevi di impostare questi nel file production.rb

config.cache_classes = true 
config.serve_static_assets = true 
config.assets.compile = true 
config.assets.digest = true 
+0

Questo era il mio problema. Dopo aver quasi sbattuto la testa nell'ultima settimana, vorrei ringraziare! – IIllIIll

+0

Bello, questa soluzione ha funzionato per me. Grazie – Cas

+0

Puoi spiegare perché ha funzionato questa soluzione? @ Brock90 – Recomer

4

Avevo bisogno di una combinazione delle altre risposte a lavorare per me.

Avevo bisogno di usare le impostazioni di configurazione di produzione di @ Brock90 e di precompilare le risorse come menzionato da Alex.

-2

non avete la vostra foto in sotto-directory all'interno della directory images/

Se qualcuno continua ad avere problemi con questo. Stavo cercando ovunque una soluzione e ho pensato di provare tutto. Per il mio caso ho avuto esempi come

background-image: url("containers/filled/Firkin-Keg-5-Gallons_filled.png"); 

Quindi ho avuto le cartelle all'interno delle immagini. Questo ha funzionato bene per localhost, ma non avrebbe funzionato su heroku.

background-image: url("Firkin-Keg-5-Gallons_filled.png"); 

non più sottodirectory.

EDIT Questo è sbagliato. Fare riferimento ai commenti qui sotto per un uso appropriato

+2

Questo è assolutamente sbagliato. Le sottocartelle funzionano perfettamente. Devi comunque usarlo correttamente: 'background-image: url (image_path (" containers/filled/Firkin-Keg-5-Gallons_filled.png "))' e assicurati che il tuo foglio di stile abbia la desinenza '.scss' – Iceman

+0

Usa il costruito in asset pipeline SCSS helper per collegarsi alle risorse compilate dalla pipeline. Ci sono un mucchio ma ognuno collega al percorso '/ app/assets' corrispondente:' image-url', 'font-url' –