2017-07-14 4 views
0

Les images ne s'affichent pas en mode production. Cela fonctionne bien dans l'environnement de développement.L'image ne s'affiche pas en mode production

Par exemple, l'image ne s'affiche pas pour le code suivant

<img alt="" class="img-circle" src="/assets/avatar.jpg"> 

Mais il fonctionne pour image_tag

<%= image_tag 'avatar.jpg',class:"img-circle", :width=>'29' %> 

qui génère le code HTML suivant

<img class="img-circle" width="29" src="/assets/avatar-cabb5744ce203e3fd174df28be60bfb942d35013b57513680aadda2ba9602762.jpg" alt="Avatar cabb5744ce203e3fd174df28be60bfb942d35013b57513680aadda2ba9602762"> 

production.rb

config.serve_static_files = false 

    config.assets.js_compressor = :uglifier 

    config.assets.compile = false 

    config.assets.digest = true 

Le fichier avatar.jpg est actuellement disponible dans le dossier assets/images.

Quel est le problème réel ici? Comment résoudre ça?

+2

Essayez ceci ' 'à la place ... –

+0

Cela fonctionne, mais je suis confus pourquoi l'URL '/assets/avatar.jpg' ne sert pas l'image lorsque l'image est réellement disponible dans le dossier assets/images – prajeesh

+0

S'il vous plaît vérifier la réponse @ tadman pour l'explication ... –

Répondre

1

C'est parce que vous devez utiliser image_tag pour tous les actifs de ce type. Vous ne pouvez pas coder en dur le chemin parce qu'il change lorsque vous compilez ces ressources et qu'elles sont hachées.

Rails effectue un hachage de contenu sur chaque ressource statique pour s'assurer que le nom est unique pour une révision donnée. Cela évite les problèmes de contournement du cache où vous devez forcer les utilisateurs à s'actualiser pour obtenir des modifications et à préserver le cache pour les ressources qui n'ont pas été modifiées. L'inconvénient est le nom final est imprévisible et vous devez utiliser image_tag pour le calculer lorsque l'application est en cours d'exécution en mode production.