2010-11-06 10 views
8

Soy un firme defensor del control de versiones y estoy empezando a trabajar en un proyecto de Django. He hecho algunos antes, y he intentado algunos enfoques diferentes, pero todavía no he encontrado una estructura decente con la que me sienta cómodo.Django + SVN + Despliegue

Esto es lo que quiero:

a) El código fuente se registró en el control de versiones

b) Preferentemente, el medio ambiente no se registró en el control de versiones (algo así como buildout o requirements.txt PIP está muy bien para la creación de el medio ambiente)

c) un "obtener un nuevo desarrollador va" historia razonable

d) una historia de despliegue razonable - preferiblemente todo el entorno de despliegue podría ser generada por un script en la sER ver

Me parece que alguien tiene que haber hecho esto antes, pero muchas horas de búsqueda han dado lugar a soluciones a medias que realmente no abordan todo esto.

¿Alguna idea sobre dónde debería mirar?

Respuesta

3

Guardo un directorio de proyectos/en mi directorio personal (en Linux). Cuando tengo que comenzar un nuevo proyecto, hago un nuevo directorio, brevemente nombrado (que describe suficientemente el proyecto) en proyectos /; eso se convierte en la raíz de un nuevo virtualenv (con --no-site-packages) para ese proyecto.

Dentro de ese directorio (después de que he instalado el canal, lo obtuve y haya instalado la copia de django con la que trabajaré), "django-admin.py startproject" un subdirector, normalmente por el mismo breve nombre. Ese directorio se convierte en la raíz de mi repositorio hg (con hg init rápido y ci), sin importar cuán pequeño sea el proyecto.

Si hay alguna posibilidad de compartir el proyecto con otros desarrolladores (un proyecto para el trabajo, por ejemplo), incluyo un pip requirements.txt en la raíz del repositorio. Solo requisitos del proyecto entran allí; django-debug-toolbar y django-extensions, staples para mi flujo de trabajo dev, no son requisitos del proyecto, por ejemplo. Sur, cuando lo usamos, es.

En cuanto al proyecto django, normalmente mantengo el settings.py predeterminado, posiblemente con algunos cambios, y agrego el convenio local_settings al final del mismo (try: from local_settings import *; except ImportError: pass). La configuración del entorno específico de mi y otros desarrolladores (agregar django-extensions y django-debug-toolbar a las aplicaciones instaladas, por ejemplo) va en local_settings.py, que es no registrado en el control de versiones. Para ayudar a un nuevo desarrollador, puede proporcionar una plantilla de ese archivo como local_settings.py.temp, o algún otro nombre que no se use para ningún otro propósito, pero creo que esto innecesariamente complica el repositorio.

Para proyectos personales, normalmente incluyo un README si planeo liberarlo públicamente. En el trabajo, mantenemos entornos de Trac y una buena comunicación para que los nuevos desarrolladores estén al día en un proyecto.

En cuanto a la implementación, como mencioné anteriormente, escuché que el tejido es realmente bueno para ese tipo de scripting local/remoto automatizado, aunque realmente no he tenido la oportunidad de investigarlo.


Para los no iniciados, una sesión de shell típico para esto podría ser similar al siguiente:

$ cd ~/projects/ 
$ mkdir newproj 
$ cd newproj/ 
$ virtualenv --no-site-packages . 
$ source bin/activate 
(newproj)$ pip install django django-debug-toolbar django-extensions 
... installing stuff ... 
(newproj)$ django-admin.py startproject newproj 
(newproj)$ cd newproj/ 
(newproj)$ hg init .; hg ci -A -m "Initial code" 
+0

Ahhhh haciendo el pago en el virtualenv. Esto parece un buen enfoque. ¡Gracias! –

+0

Ahora que comencé a hacer esto, me encontré con un problema que tenía antes. Cuando el repositorio entra en el virtualenv de esta manera, no tengo un lugar para poner cosas adicionales (no desplegadas) en VC. Por ejemplo, si tuviera que usar fabric, me gustaría que mi archivo fabf fuera versionado, pero ahora la raíz del proyecto django es la parte superior de mi VC. Supongo que hacer subdirectorios primero y luego poner el proyecto Django en un subdirectorio funcionaría. Seguiré intentando. –

+0

En el trabajo, la estructura dir que han adoptado es 'project/env/www/proj /', donde "project" es un contenedor base para todo, "env" es la raíz virtualenv, "www" es el apache del proyecto " DocumentRoot "(aunque realmente no debería tener un DocumentRoot con un proyecto django), y" proj "es la raíz del proyecto django y el repositorio fuente. Puede tomar este enfoque y mover el repositorio un nivel hacia arriba (para que "www" se convierta en la raíz del repo), si realmente necesita versiones de archivos fuera de la raíz de django. – eternicode

4

Mire fabric para administrar implementaciones.

Esto es lo que uso para administrar servidores/implementaciones con fabric: louis (es solo una colección de comandos fabric). Guardo un archivo louisconf.py con cada proyecto.

Recomiendo usar un VCS distribuido (git, hg, ...) en lugar de svn. La razón es que la facilidad de ramificación permite varios esquemas de implementación. Puede tener, por ejemplo, ramas production y staging. Luego haces cumplir que las únicas fusiones en la producción pasan de la puesta en escena por convención.

En cuanto a que los desarrolladores comiencen rápidamente lo tienes bien con pip y requirements.txt. Creo que eso también significa que estás usando virtualenv, pero si no es la tercera pieza. Recomiendo obtener un README básico en su lugar. Haga que la primera asignación de cada desarrollador que se une a un proyecto sea actualizar el README.

La forma más difícil de conseguir a alguien a bordo es pedirle que revise el código, cree un virtualenv e instale los requisitos.

Recomiendo tener un archivo settings.py que funcione con sqlite3 y que un nuevo desarrollador pueda utilizar para ponerse en marcha rápidamente (es decir, después de instalar los requisitos). Sin embargo, la forma en que administre los diferentes archivos de configuración depende del diseño de su proyecto. Debe haber algunos conjunto de configuraciones predeterminadas para que los nuevos desarrolladores utilicen.

+0

Voy a tratar Tela y ver si se soluciona mi "historia de despliegue" problema. Acepté la otra respuesta porque tiene más información sobre la estructura de directorios. ¡Gracias por la ayuda! –

Cuestiones relacionadas