2009-12-07 5 views
6

Après avoir lu Storing Images in DB - Yea or Nay? Je pense que le système de fichiers est le bon endroit pour stocker des images. Mais j'aimerais savoir comment vous gérez la sauvegarde/le contrôle de version des images téléchargées dans vos différents environnements (dev/stage/prod) et pour l'équilibrage de la charge réseau?Contrôle de la version des images téléchargées dans le système de fichiers

Ces problèmes sont assez faciles à gérer lorsque vous travaillez avec une base de données, par exemple. effectuer une sauvegarde à partir de l'environnement de production et restaurer la base de données dans l'environnement de développement. Que pensez-vous d'utiliser par exemple git pour gérer le contrôle de version des fichiers téléchargés, par exemple?

Environnement Production:

  • Une image est téléchargée dans un dossier partagé sur le serveur Web.
  • données Meta sont stockées dans la base de données
  • L'image est automatiquement ajouté à un dépôt git

Developer au travail:

  • vérifie le code source.
  • Exécute un script pour restaurer la base de données.
  • Exécute un script pour obtenir les dernières images.

Je pense que la solution ci-dessus est assez lisse pour le développeur, les images seront sous contrôle de version et les environnements peuvent être isolés les uns des autres.

+0

Cela semble être une bonne idée. – grenade

+0

"utiliser un référentiel complètement séparé du code source": ce n'est pas incompatible avec l'approche sous-module: l'idée reste au repo du code source de référencer un commit donné du repo d'images, mais ce dernier (le repo des images) est toujours un repo "complètement séparé". – VonC

Répondre

2

Pour nous, le contrôle de version n'est pas aussi important que la distribution. Les métadonnées sont ajoutées via l'administrateur Web et les images sont supprimées sur le serveur d'administration. Les scripts Rsync les poussent vers le cluster qui sert à produire des images. Pour dev/test, nous rsync juste de prod master server vers le serveur dev.

Le rsync est idéal pour l'équilibrage de charge et la distribution. Si vous utilisez le serveur admin/master, vous avez une bonne solution.

Si vous êtes OK avec une sauvegarde qui préserve l'historique des fichiers au moment de la sauvegarde (par opposition au contrôle de version à chaque révision), une adaptation de ceci peut aider: Automated Snapshot-style backups with rsync.

+0

Merci pour vos commentaires et je pense que la distribution et la sauvegarde sont plus importantes pour nous que le versioning. – orjan

2

Cela peut fonctionner, mais je stockerais ces images dans un dépôt git qui serait alors un submodule of the git repo avec le code source.
Ainsi, une relation forte existe entre le code et les images, même si les images sont dans leur propre repo.
De plus, il évite les problèmes avec git gc ou git prune étant moins efficace avec un grand nombre de fichiers binaires: si les images sont dans leur propre dépôt, et avec quelques variations pour chacun d'entre eux, la maintenance sur ce repo est assez légère. Considérant que le repo de code source peut évoluer beaucoup plus dynamiquement, avec les commandes habituelles de maintenance git en jeu.

+0

Merci pour les commentaires concernant git.Ma première idée était d'utiliser un référentiel complètement séparé du code source mais les sous-modules semblent être une autre option. Je suis plutôt confiant que ça vaudra la peine de lancer un pic pour voir si c'est possible. – orjan

Questions connexes