Pregunta

Simplemente curioso cómo las personas están implementando sus proyectos de Django en combinación con virtualenv

  • Más específicamente, ¿cómo mantener sus virtualenv de producción sincronizada correctamente con el equipo de desarrollo?

Puedo usar git para SMC, pero no tengo a mi virtualenv dentro del repositorio git - habría de hacerlo, o es mejor utilizar la congelación de pepita y volver a crear el entorno en el servidor utilizando la salida de congelación? (Si lo hace, podría describir los pasos - estoy encontrando muy poca buena documentación sobre el proceso de descongelación - es algo así como pip install -r freeze_output.txt posible)

¿Fue útil?

Solución

Acabo de crear algo como esto en el trabajo mediante la pipa, Tela y Git. El flujo es básicamente como este, y inspira en gran medida de la este script :

  1. En nuestro árbol de fuentes, mantenemos un archivo requirements.txt. Vamos a mantener esto de forma manual.
  2. Cuando hacemos una nueva versión, la secuencia de comandos de la tela crea un archivo basado en lo que sea treeish lo pasamos.
  3. Tela se encuentra el SHA para lo que estamos desplegando con git log -1 --format=format:%h TREEISH. Eso nos da SHA_OF_THE_RELEASE
  4. Tela recibirá el último SHA para presentar nuestras necesidades con git log -1 --format=format:%h SHA_OF_THE_RELEASE requirements.txt. Este escupe la versión corta del hash, como 1d02afc que es el SHA para ese archivo para esta versión en particular.
  5. El script Tela entonces buscar en un directorio donde se almacenan nuestros virtualenvs en el host (s) remoto.
    1. Si no hay un directorio llamado 1d02afc, se ha creado y configurado con un nuevo pip install -E /path/to/venv/1d02afc -r /path/to/requirements.txt virtualenv
    2. Si hay es una path/to/venv/1d02afc existente, no se hace nada

La pequeña parte de esta magia está pasando lo árbol-ish desea GIT, y tener que hacer el embalaje (de tela). Mediante el uso de git archive my-branch, git archive 1d02afc o cualquier otra cosa, estoy garantizado para conseguir los paquetes que están correctamente instalados en mis máquinas remotas.

Fui esta ruta ya que realmente no quería tener virtuenvs adicionales que flotan en torno a si los paquetes no habían cambiado entre la liberación. Tampoco me gusta la idea de tener los paquetes reales que dependo de mi propio árbol de código fuente.

Otros consejos

Yo uso este bootstrap.py: http: // github.com/ccnmtl/ccnmtldjango/blob/master/ccnmtldjango/template/bootstrap.py

que espera son directorio llamado 'condiciones' que se ve algo como esto: http://github.com/ccnmtl/ccnmtldjango/tree/master/ccnmtldjango/template/requirements/

Hay un apps.txt, un libs.txt (que incluye apps.txt - A mí me gusta conservar las aplicaciones Django separado de otros módulos de Python) y un directorio src, que contiene los archivos de código reales.

Cuando ./bootstrap.py se ejecuta, crea la virtualenv (limpiando una anterior si es que existe) e instala todo de requisitos / apps.txt en ella. Yo no he instalar nada en el virtualenv lo contrario. Si quiero incluir una nueva biblioteca, puse el archivo tar en requisitos / src /, añadir una línea a uno de los archivos de texto y volver a ejecutar ./bootstrap.py.

bootstrap.py y requisitos se comprueban en el control de versiones (también una copia de pip.py por lo que ni siquiera tiene que tener esa instalada en todo el sistema en cualquier lugar). El virtualenv en sí no lo es. Los guiones que tengo que empujan a la producción corren ./bootstrap.py en el servidor de producción cada vez empujo. (Bootstrap.py también va a algunas longitudes para asegurarse de que está pegando a Python 2.5, ya que es lo que tenemos en los servidores de producción (Ubuntu Hardy) y mi máquina dev (Ubuntu Karmic) por defecto en Python 2.6, si usted no tiene cuidado)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top