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?
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.
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.
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.
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 .
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"
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.
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
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