web-dev-qa-db-fra.com

Rails 4 images ne se chargent pas sur heroku

J'ai passé la majeure partie de la journée à essayer de charger des images sur mon application heroku. Tout ce que j'essaie fonctionne localement, mais pas après avoir été déployé à Heroku.

J'ai des fichiers png enregistrés dans le dossier images sous mes ressources. Je fais référence à ces images avec une syntaxe dans mon css telle que;

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

Dans heroku, lorsque je vérifie l’arrière-plan, le lien assets/sf.png est présent, mais lorsque vous cliquez dessus, il affiche une image endommagée, ce qui suggère qu’elle ne s’est pas chargée correctement.

J'ai essayé de basculer config.serve_static_assets = false dans le production.rb fichier entre true et false et aucun des deux ne fonctionne.

J'ai aussi

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

La précompilation est toujours réussie.

Rails 4. Des idées sur quoi d'autre à essayer?

64
brad

Un autre problème que je rencontrais à ce sujet est que je précompilais mes ressources localement, avant de les charger dans heroku. Pour cela, vous devez suivre différentes étapes, décrites ci-dessous. Si vous pré-compilez vos ressources localement, vous devez suivre ces étapes. Sinon, les mises à jour apportées à votre dossier de ressources ne seront pas répercutées dans prod.

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

Rails_ENV=production bundle exec rake assets:precompile

commit et Push au serveur.

27
brad

Je devais combiner plusieurs solutions pour que cela fonctionne, voici ce que j'ai fait:

Gemfile

gem 'Rails_12factor', group: :production

dans mon console Herok

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

Je n'avais pas besoin de précompiler les actifs localement.

92
kal

Vous devez faire deux choses pour le résoudre. Commencez par changer ces deux lignes de false en true dans production.rb fichier.

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

Deuxièmement, si vous avez une syntaxe comme celle-ci pour vos images

    background: url("imgo.jpg") 

Le changer en

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

J'espère que ça fait votre travail.

55
Prabhakar

J'ai eu un problème similaire et je l'ai résolu avec la ligne suivante dans le fichier custom.css.scss .. Dites-moi si cela fonctionne pour vous.

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

Le référencement de l'actif étant effectué différemment selon que vous utilisez ERB ou Sass, voir dans Ruby sur Rails Guide .

12
Percevalve

Je n'ai pas encore la réputation de commenter, mais il est important de noter que la fonctionnalité des laboratoires Heroku a été supprimée. Par conséquent, vous obtenez maintenant une erreur "Aucune de ces fonctionnalités: utilisateur-env-compiler"

Plus: https://github.com/Crowdtilt/CrowdtiltOpen/issues/251

3
alightholder

Rails ('4.1.5') J'ai eu un problème similaire d'images ne figurant pas sur Heroku mais apparaissant localement. Je n'utilise pas de gemmes Paperclip ou carrierwave, je précompile localement et j'utilise aussi Rails_ENV = production I Pousser sur github et il se déploie correctement jusqu'à Heroku.

J'ai résolu le problème en ayant:

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

images copiées vers le public/les actifs depuis l'application/les actifs. puis:

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

git commit
git Push

Et cela fonctionnait bien sur Heroku.

2
Batz

J'ai également essayé de nombreuses solutions, mais j'ai trouvé une solution et une explication précieuses. 1. Heroku recherche les actifs dans le dossier public. Cela signifie que vous devez précompiler vos actifs, mais si vous étiez comme moi quelqu'un cherchant un moyen de précompiler mes actifs lorsque mon environnement de développement est défini sur gem sqlite et la production sur pg, puis vous le feriez.

dans votre production.rb

config.serve_static_assets = true

si vous n'avez pas installé Gem pg, vous devez le commenter et changer votre environnement de production pour utiliser gem sqlite et l'exécuter.

Rails_ENV=production bundle exec rake assets:precompile

lorsque tous les actifs ont été précompilés, rétablissez vos paramètres par défaut et ajoutez git., commit et Push to heroku

1
user2903934

J'ai eu un problème similaire avec afficher uniquement des images. Etre nouveau sur Rails je ne savais pas que je pouvais utiliser:

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

Au lieu du HTML traditionnel.

Le image_tag est expliqué dans la Rails api mais je trouve que son utilisation est mieux expliquée ici: http://apidock.com/Rails/ActionView/Helpers/AssetTagHelper/image_tag =

Tout ce que j'ai ajouté à mon application était ce petit bijou: gem 'Rails_12factor', group: :production

Comme décrit dans la documentation heroku asset-pipeline. https://devcenter.heroku.com/articles/Rails-4-asset-pipeline

1
Jorge Diaz