2013-12-14 15 views
13

Se guardate la mia app qui: http://quiet-brushlands-5712.herokuapp.com/, vicino al pulsante c'è un'icona, un glyphicon. Ma non sta comparendo su heroku. localmente mostrano come bene come questo:Glyphicon funziona localmente ma non su Heroku

enter image description here

ho provato la "soluzione" da qui Using boostrap.css file in Rails production/heroku w/o LESS or SASS e da altri collegamenti a Google. Ho bisogno anche del glifo da mostrare su Heroku. Qualsiasi aiuto?

Non ho scaricato manualmente il Bootstrap di Twitter, sto solo usando una gemma. Nella mia console JavaScript ho questo:

GET http://quiet-brushlands-5712.herokuapp.com/assets/glyphicons-halflings.png 404 (Not Found)

mio Gemfile se aiuta:

source 'https://rubygems.org' 

gem 'rails', '4.0.2' 
gem 'sass-rails', '~> 4.0.0' 
gem 'uglifier', '>= 1.3.0' 
gem 'coffee-rails', '~> 4.0.0' 
gem 'jquery-rails', '3.0.4' 
gem 'turbolinks', '2.0.0' 
gem 'jbuilder', '~> 1.2' 
gem 'bootstrap-sass', '2.1' 
gem 'jquery-ui-rails', '4.1.0' 
gem 'pg' 
gem 'font-awesome-rails', '4.0.3.0' 

group :doc do 
    # bundle exec rake doc:rails generates the API under doc/api. 
    gem 'sdoc', require: false 
end 

group :development, :test do 
    gem 'rspec-rails', '2.11.0' 
    gem 'guard-rspec', '1.2.1' 
    gem 'guard-spork', '1.2.0' 
    gem 'childprocess', '0.3.6' 
    gem 'spork', '0.9.2' 
end 

group :production do 
    gem 'rails_12factor' 
end 
+0

Hai guardato negli strumenti di sviluppo del browser per un 404 che probabilmente sta accadendo quando tenta di recuperare l'icona? Confronta la posizione prevista dell'icona con quella effettiva. – Vidya

+0

nella mia console js ho 'GET http://mighty-brushlands-6367.herokuapp.com/assets/glyphicons-halflings.png 404 (non trovato)' e non sono sicuro di come risolvere quella causa non ho idea di dove quel file si trova localmente. – Emanuel

+1

Potrebbe essere il momento di configurare [Rails Asset Pipeline] (https://devcenter.heroku.com/articles/rails-asset-pipeline) su Heroku. – Vidya

risposta

35

La soluzione era quella di cambiare config.assets.compile = false al config.assets.compile = true nel file config/environments/production.rb.

+1

Questa soluzione ha funzionato perfettamente per me – ganeshran

+0

+1, grazie. Non avevo nemmeno bisogno di riavviare manualmente heroku, lo ha fatto automaticamente. –

+0

Non capisco davvero perché debba essere cambiato due volte. Ma non funziona per me. – Sucrenoir

2

seguito al commento di Vidya, è probabilmente sarà la vostra pipeline di risorsa che è il problema

Anche se non ho familiarità con le specifiche di Bootstrap per questo, c'è un grosso problema con la pipeline di asset di Heroku, che deve essere precompilato prima di poterlo usare efficacemente


Asset Fingerprinting

Heroku richiede di precompilare i vostri beni a causa della asset fingerprinting

Questo è dove il vostro patrimonio avranno un hash applicato alla fine del loro nome, come image-12sdafdsafkj223423jnjfadsnfsad.png o simili . La ragione di ciò è apparentemente quella di mantenere le risorse uniche o qualcosa del genere

Se si follow the link provided by Vidya, si scoprirà che Heroku richiede di precompilare le risorse utilizzando la CMD di Rails. Quello che non dice è che questo potrebbe scombussolare l'allineamento immagini a meno che sono stati assegnati dinamicamente


SCSS

Come accennato, non sono sicuro di come questo vale per Bootstrap in particolare, ma con le risorse di asset di Heroku, è necessario assicurarsi che le immagini vengano assegnate utilizzando percorsi dinamici

Come in Rails, SCSS consente di utilizzare asset_path o image_path per creare un collegamento dinamico. Questo è quello che devi fare per risolvere il tuo problema. Ecco po 'di codice che usiamo, che funziona su Heroku:

.navigation_bar { 
     z-index: 200; 
     position: relative; 
     background: asset_url('nav_bar/bg.png') repeat-x top; 
} 
0

In config/environments/production.rb

Change config.assets.compile = false a config.assets.compile = true

(e quindi non dimenticate di impegnarsi e spingere a Heroku)

Ha lavorato per me ...

0

Perché Sono arrivato a questa risposta quando stavo cercando di capire che dovrei mettere qui che la soluzione che ho trovato era includere un n importare in "bootstrap-sprockets" prima del bootstrap. Questo è documentato allo https://github.com/twbs/bootstrap-sass/issues/653.

Mi rendo conto che la domanda non sta usando bootstrap-sass 3.2+ ma immagino che questo possa aiutare qualcuno.

13

Soluzione che non utilizza il fallback di compilazione (testato su Rails 4.1): Nei file scss, importare bootstrap-sprockets appena prima del bootstrap.

@import "bootstrap-sprockets"; 
@import "bootstrap"; 
+1

Funziona come un incantesimo, grazie !! – krpec

+1

Non sto usando scss. Come posso risolvere questo problema se sto usando un semplice css? – aandis

+0

Non funziona per me –

1

Se non si desidera impostare il config.assets.compile true nell'ambiente di produzione (che probabilmente non dovrebbe per migliorare le prestazioni), è possibile precompilare manualmente le risorse prima di spingere a Heroku utilizzando rake assets:precompile RAILS_ENV=production