web-dev-qa-db-fra.com

Puis-je héberger des images dans Heroku? Ou ai-je besoin de S3?

Je déploie mon application web (c'est pour un client d'entreprise). Ainsi, les utilisateurs n'ajouteront pas d'images, mais seule l'entreprise le fera.

Je me suis déployé sur Heroku et mes images sont toujours visibles. Quand dois-je utiliser S3? Je vais avoir 100 images au total sur le site, et la taille variera comme> 7 par semaine. Puis-je utiliser uniquement Heroku?

25
Gibson

La réponse courte: si vous autorisez des utilisateurs ou des administrateurs à télécharger des images, vous ne devez pas utiliser le système de fichiers Heroku pour cela car les images disparaîtront soudainement.

Comme expliqué dans la documentation Herok :

Chaque dyno obtient son propre système de fichiers éphémère, avec une nouvelle copie du code le plus récemment déployé. Pendant la durée de vie du dyno, ses processus en cours d'exécution peuvent utiliser le système de fichiers comme bloc-notes temporaire, mais aucun fichier écrit n'est visible pour les processus de tout autre dyno et les fichiers écrits seront supprimés au moment où le dyno est arrêté ou redémarré.

Cela signifie que les images téléchargées par l'utilisateur sur le système de fichiers Heroku sont non seulement effacées à chaque poussée, mais également à chaque redémarrage du dyno, ce qui arrive parfois (même si vous les cingler fréquemment pour les empêcher de dormir).

Une fois que vous commencez à utiliser un deuxième dyno Web, il ne pourra pas lire le système de fichiers de l'autre dyno, donc les images ne seront visibles que d'un seul dyno. Cela provoquerait des problèmes étranges où les utilisateurs peuvent parfois voir des images et parfois non.

Cela dit, vous pouvez temporairement stocker des images sur le système de fichiers Heroku si vous implémentez n téléchargement de fichiers pass-through vers un magasin de fichiers externe .

47
fivedigit

Pipeline d'actifs

La réponse de FiveDigit est très bonne - il y a quelque chose de plus à considérer; le rôle des asset pipeline dans Rails

Si les images que vous avez sont utilisées comme actifs (IE elles sont utilisées dans la mise en page; ne sont pas modifiables par l'utilisateur), alors vous pouvez les stocker dans le assets/images dossier. Il n'y a pas de limite au nombre d'actifs que vous pouvez conserver avec votre application, mais vous devez être sûr de ce qu'ils sont - ce sont des fichiers qui facilitent le fonctionnement de votre application; pas fichiers pouvant être téléchargés/manipulés:

Le pipeline d'actifs fournit un cadre pour concaténer et réduire ou compresser les actifs JavaScript et CSS. Il ajoute également la possibilité d'écrire ces actifs dans d'autres langages et pré-processeurs tels que CoffeeScript, Sass et ERB.

Le pipeline d'actifs compresse et empreint les fichiers stylesheet, image et js dont il dispose lorsque vous déployez votre application sur Heroku ou tout autre serveur. Cela signifie que si ces fichiers ne changent pas, vous pouvez les y stocker

-

S3

La raison pour laquelle vous souhaitez utiliser les goûts de S3 est spécifique si vos fichiers d'images sont conçus pour changer (l'utilisateur peut les télécharger/les modifier). Quel que soit le système de fichiers de Heroku, si les images sont liées à des changements dans la base de données, vous devrez garder un magasin central pour elles - si vous changez de serveur, elles doivent être accessibles

Pour ce faire, vous devez vous assurer que vous comprenez comment vous voulez que les fichiers fonctionnent - vont-ils être manipulés en permanence par l'utilisateur ou non? Si oui, vous devrez explorer l'intégration de S3 dans votre application

9
Richard Peck