2009-12-07 16 views
6

Después de leer el archivo Storing Images in DB - Yea or Nay? Creo que el sistema de archivos es el lugar adecuado para el almacenamiento de imágenes. Pero me gustaría saber cómo maneja el control de copia de seguridad/versión de las imágenes cargadas en sus diferentes entornos (dev/stage/prod) y para el balanceo de carga de la red.El control de versiones de las imágenes cargadas al sistema de

estos problemas es bastante fácil de manejar cuando se trabaja con una base de datos, por ejemplo, hacer una copia de seguridad desde el entorno de producción y restaurar la base de datos en el entorno de desarrollo.

¿Qué opinas de utilizar, por ejemplo, git para manejar el control de versiones de archivos subidos por ejemplo?

Producción Medio Ambiente:

  • Una imagen se carga en una carpeta compartida en el servidor web.
  • metadatos se almacenan en la base de datos
  • La imagen se agrega automáticamente a un repositorio git

desarrollador en el trabajo:

  • desprotege el código fuente.
  • Ejecuta un script para restaurar la base de datos.
  • Ejecuta un script para obtener las últimas imágenes.

creo que la solución anterior es bastante suave para el desarrollador, las imágenes estarán bajo el control de versiones y los entornos pueden ser aislados unos de otros.

+0

Parece una buena idea. – grenade

+0

"use un repositorio completamente separado del código fuente": esto no es incompatible con el enfoque del submódulo: la idea sigue siendo que el repositorio de código fuente haga referencia a una confirmación determinada del repositorio de imágenes, pero este último (el repositorio de imágenes) todavía está un repo "completamente separado". – VonC

Respuesta

2

Para nosotros, el control de versiones no es tan importante como la distribución. Los metadatos se agregan a través del administrador web y las imágenes se eliminan en el servidor de administración. Los scripts Rsync los envían al clúster que sirve imágenes prod. Para el desarrollo/prueba, simplemente sincronizamos desde el servidor principal de producción hasta el servidor de desarrollo.

El rsync es grande para el equilibrio y la distribución de la carga. Si subes en git para el servidor administrador/maestro, tienes una solución bastante buena.

Si estás bien con copia de seguridad que preserva la historia registrada en el momento de la copia de seguridad (en contraposición al control de versiones con cada revisión), a continuación, algunos de adaptación que esto puede ayudar: Automated Snapshot-style backups with rsync.

+0

Gracias por los comentarios y creo que la distribución y la copia de seguridad son más importantes para nosotros que las versiones. – orjan

2

Se puede trabajar, pero me gustaría almacenar esas imágenes en un repositorio git, que sería entonces una submodule of the git repo con el código fuente.
De esta forma, existe una fuerte relación entre el código y las imágenes, aunque las imágenes estén en su propio repositorio.
Además, evita problemas con git gc o git prune siendo menos eficiente con una gran cantidad de archivos binarios: si las imágenes están en su propio repositorio, y con algunas variaciones para cada una de ellas, el mantenimiento de ese repositorio es bastante ligero. Mientras que el repositorio de código fuente puede evolucionar mucho más dinámicamente, con los comandos de mantenimiento de git habituales en juego.

+0

Gracias por los comentarios sobre git.Mi primera idea fue usar un repositorio completamente separado del código fuente, pero los submódulos parecen ser otra opción. Me siento bastante seguro de que valdrá la pena ejecutar un pico para ver si es posible. – orjan

Cuestiones relacionadas