2013-08-19 11 views
59

Ho trascorso la maggior parte della giornata cercando di caricare le immagini sulla mia app heroku. Tutto ciò che provo funziona localmente, ma non dopo essere stato distribuito su heroku.Rails 4 immagini non caricate su heroku

I file png sono stati salvati nella cartella delle immagini sotto il mio patrimonio. Mi riferisco a queste immagini con sintassi nel mio css come;

#signin { 
    background: url(<%= asset_path 'sf.png' %>); 
    background-size: 100%; 
} 

In Heroku quando ho ispezionare il fondo il link attivi/sf.png è lì, ma quando si fa clic viene visualizzata l'immagine spezzata, suggerendo che non è stato caricato correttamente.

Ho provato a cambiare config.serve_static_assets = false nel file production.rb tra vero e falso e nessuno dei due funziona.

devo anche

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

Precompile è sempre successo.

Rails 4. Qualche idea su che altro provare?

risposta

25

Un altro problema, stavo avendo con questo era che stavo precompilando le mie risorse a livello locale, prima di caricarlo in heroku. Ciò richiede di seguire una serie diversa di passaggi, che possono essere trovati di seguito. Se si precompilano le risorse in locale, è necessario seguire questi passaggi o eventuali aggiornamenti apportati alla cartella delle risorse non si rifletteranno in prod.

https://devcenter.heroku.com/articles/rails-asset-pipeline

RAILS_ENV=production bundle exec rake assets:precompile

commit e push al server.

+0

grazie, ha funzionato benissimo anche per i miei vps. – rmagnum2002

-1

Le immagini non verranno visualizzate come risorse per impostazione predefinita, solo css e js. Si dovrebbe esaminare la risposta di

Syed Ehtsham Abbas a questa domanda Heroku does NOT compile files under assets pipelines in Rails 4

+0

che ha funzionato inizialmente ma dopo un altro ricompilare e un'altra ricarica si è rotta – brad

+0

@brad puoi pubblicare la configurazione del tuo prodotto? – nXqd

87

avevo bisogno di combinare diverse soluzioni per fare questo lavoro, qui è quello che ho fatto:

Gemfile

gem 'rails_12factor', group: :production 

nella mia console Heroku

heroku labs:enable user-env-compile -a yourapp 

production.rb

config.serve_static_assets = true 
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' 
config.assets.compile = true 

Non avevo bisogno di precompilare le attività a livello locale.

+0

grazie, funziona come un fascino – AlaskaKid

+0

Grazie! Funziona! – jizak

+21

Ho già avuto la gemma, ma a parte questo, 'config.assets.compile = true' mi è bastato. Esecuzione di Ruby 2.0, Rails 4.0, su stack Cedar EU. – zykadelic

12

Ho avuto un problema simile e l'ho risolto con la seguente riga in custom.css.scss .. Dimmi se questo funziona per te.

background: image-url('sf.png') 

Riferimento bene sta facendo modi diversi a seconda se si utilizza ERB o Sass, see in the Ruby on Rails Guide.

+1

Questo l'ha risolto per me, grazie! – user3408293

+0

Questo ha funzionato anche per me. Originariamente avevo: 'background: url (file.png)' Cambiandolo in 'background: image-url ('file.png')' ha fatto il trucco. –

+0

questa è la vera soluzione. – samuelkobe

47

Hai bisogno di fare due cose per risolverlo. Innanzitutto, modificare queste due righe da falso a vero nel file production.rb.

 config.assets.compile = true 
     config.assets.digest = true 

In secondo luogo, se hai la sintassi come questo per le immagini

background: url("imgo.jpg") 

cambiare a

 background: image-url("image.jpg") 

spero che fa il tuo lavoro.

+0

Che ha funzionato per me :) –

+2

Sì !! ! Nient'altro ha funzionato per me, ma ciò ha fatto (impostando 'config.assets.compile' su' true'). –

+0

Sì, questo ha funzionato anche per me! Grazie! Configurazione: config.assets.compile = true – SaintClaire33

1

Ho avuto un problema simile con la visualizzazione di solo immagini. Essendo nuovo di rotaie non sapevo che potevo usare:

<%= image_tag("fileName.png", alt: "File Name Fancy", size: "100x100")%>

Invece di html tradizionale.

L'image_tag è spiegato nella rotaie api ma trovo il suo utilizzo è meglio spiegato qui: http://apidock.com/rails/ActionView/Helpers/AssetTagHelper/image_tag

Tutto quello che ho aggiunto alla mia applicazione è stata questa gemma: gem 'rails_12factor', group: :production

Come descritto nel bene Heroku -pagina di documentazione. https://devcenter.heroku.com/articles/rails-4-asset-pipeline

3

Rails ('4.1.5') Ho avuto un problema simile di immagini non visualizzate su Heroku ma visualizzate localmente. Non utilizzo le gemme paperclip o carrierwave, precompilo localmente e anche usando RAILS_ENV = produzione Spingo su github e distribuisce bene su Heroku.

ho risolto il problema di avere:

config.serve_static_assets = true 
config.assets.compile = true 
config.assets.js_compressor = :uglifier 
config.assets.digest = true 

// delete precompiled assets 
bundle exec rake assets:clobber --trace 
RAIL_ENV=production bundle exec rake assets:clobber --trace 

immagini copiate/beni pubblici da app/attività. quindi:

// tests should pass 
bundle exec rake assets:precompile --trace 
RAILS_ENV=production bundle exec rake assets:precompile --trace 

git commit 
git push 

E stava funzionando bene su Heroku.

1

Ho provato anche molte soluzioni, ma ho trovato una soluzione e una spiegazione preziose 1. Heroku cerca le risorse nella cartella pubblica e ciò significa che devi pre-compilare le tue risorse ma se tu fossi come me qualcuno che cerca un modo per precompilare le mie risorse quando il mio ambiente di sviluppo è impostato su gem sqlite e production set su pg, lo faresti.

nella vostra produzione.rb

config.serve_static_assets = true 

se non si dispone di gemma pg installato è necessario commentare fuori e cambiare il vostro ambiente di produzione per usare gemma SQLite ed eseguire questo

RAILS_ENV=production bundle exec rake assets:precompile 

quando tutti i beni sono stati precompilati, tornare alle impostazioni predefinite e git add., commit e push su heroku

Problemi correlati