Beneficios de almacenar Django con el código de la aplicación en el control de versiones

Intento simplemente implementar nuestra aplicación y administrar más fácilmente las versiones de bibliotecas y frameworks en los que dependemos.

¿Tiene sentido almacenar Django en nuestro VCS? Esto idealmente me facilitaría la optimization de la implementación y puedo administrar cualquier cambio de model que Django haga a las aplicaciones integradas (django.contrib.auth, django.contrib.sites, etc.) usando South.

¿Hay razones por las que no debería hacer esto? ¿Qué haces para tus aplicaciones?

Guardaría absolutamente todo en su VCS. ¿Quieres actualizar Django? ¿Quieres agregar un complemento? Sincronizar esto con algunos desarrolladores y diferentes entornos podría ser una pesadilla. No tengo que depurar esto si las versiones no están sincronizadas. ¿Qué sucede si tienes múltiples aplicaciones django en las que necesitas trabajar y son versiones diferentes?

Es posible que desee echar un vistazo a los siguientes dos artículos:

  • Una cartilla sobre virtualenv
  • Herramientas del pirata informático moderno de Python: virtualenv, tela y pipa

Guardo todo desde el directory que virtualenv crea en SVN. Mi script de implementación básicamente consiste en lo siguiente:

  • Finalizar (solo inicialmente, y luego actualizar) proyecto en la carpeta del server
  • rsync al directory del que Apache sirve los files (sin include las carpetas .svn)
  • Establecer passwords de database y permissions para ese entorno
  • Reiniciar pasajero
  • ¡Escriba el número de revisión en el file de text desde la copy de trabajo al directory de implementación (podría ser útil más adelante!)

No creo que ganes mucho almacenando Django en control de versiones a less que estés usando una versión modificada de Django. Parece que estás trabajando con otros desarrolladores, así que definitivamente estás trabajando en algunos VCS (incluso trabajando solo hay muchos beneficios).

Para implementar su aplicación, puede encontrar la pena build un package distutils que pueda especificar sus dependencies (como una versión específica de Django). El uso de virtualenv le ayudará a realizar un seguimiento de las dependencies.

Sugeriría que para liberar a un server de producción, debe "labelr" cada lanzamiento y luego exportarlo a su sistema de producción, en lugar de verificarlo. Esto ayuda a evitar que las personas actualicen cosas dentro de la label y actualicen desde el control de la versión.

Otra cosa que creo que vale la pena hacer cuando se lanza a un sistema de producción es crear un nuevo directory para cada export del código que incluya el número de versión, y luego tener un enlace simbólico que apunte a la versión activa. Esto le permite retroceder a una versión anterior fácilmente. South, que mencionas también es muy útil para esto.