2011-05-21 13 views
8

He estado en django desde hace un tiempo y la mayor parte de mi enfoque ha estado en aprender cómo desarrollar y ejecutar aplicaciones localmente en mi máquina de desarrollo. Ahora estoy tratando de aprender las mejores prácticas para la administración de implementación y lanzamiento.django release management (montaje, prueba y producción)

Estoy tratando de configurar mi código en github y de alguna manera configurar un entorno de producción y almacenamiento donde pueda impulsar los cambios con el mínimo impacto.

¿Hay mejores prácticas que pueda seguir? y cómo se crea un entorno ágil mediante el cual se puede confiar el código en un entorno de ensayo donde los clientes pueden ver el trabajo mientras lo haces.

+0

¿Tiene servidores virtualizados disponibles o no? Las cosas son mucho más simples con la virtualización. –

+0

"¿Hay mejores prácticas que pueda seguir?" Eso es tonto. Sí. Hay muchas mejores prácticas. ¿Quizás tienes algo más que te gustaría preguntar? –

+3

Un "sí" obviamente no ayuda a nadie como respuesta en SO. Estoy seguro de que podría ayudar al consultante mediante enlaces proporcionados a estas prácticas si sabe que existen. –

Respuesta

3

configuro un entorno de producción y almacenamiento donde puedo impulsar los cambios con un impacto mínimo.

Esto es fácil en algunos casos y difícil en algunos casos.

Cuando cambie el diseño de la base de datos en Django, debe volver a hacer clic en syncdb, y puede que tenga que extraer y volver a cargar los datos existentes cuando lo hace. Esto es duro. Algunas personas usan south. Lo hicimos a mano porque south maneja la mayoría de los casos, no todos de ellos.

Cuando lanza un nuevo código (sin cambio de base de datos) las actualizaciones son bastante triviales.

  1. Cuando Apache se inicia, mod_wsgi comienza.
  2. Cuando se inicia mod_wsgi, lee los archivos .wsgi para determinar qué hacer.
  3. El archivo .wsgi - esencialmente - define el bucle de manejo de respuesta de solicitud de Django que invocará su aplicación.
  4. Cuando cambia la marca de tiempo de un archivo .wsgi, mod_wsgi vuelve a leer el archivo. Esto, en efecto, reiniciará su aplicación.

¿cómo se crea un entorno ágil mediante el cual se puede comprometer su código en un entorno de ensayo donde los clientes pueden ver el trabajo como lo haces.

Esto es bastante fácil.

  1. Ponga su código de aplicación en /opt/myapp/myapp-x.y/ estructuras de directorios. El nombre myapp-x.y coincide con un nombre de etiqueta git.

  2. La clasificación por etapas es simplemente una configuración de Django utilizando la próxima versión de la aplicación. /opt/myapp/myapp-2.3/. La producción es la versión actual. /opt/myapp/myapp-2.2/. Sí, hay versiones anteriores.

  3. Defina su configuración de Apache para tener dos (o más) "ubicaciones", utilizando la directiva Apache <Location>. Una ubicación es "producción" con rutas ordinarias. El otro es "puesta en escena" con otros caminos. O usa el host virtual. O cualquier otra cosa Apache que te haga feliz.

Ahora tiene ambas versiones ejecutándose en "ubicaciones" paralelas.

Puede ajustar la puesta en escena (quizás) rehaciendo la base de datos y cambiando el archivo .wsgi para apuntar a una nueva versión de su aplicación.

Puede modificar la producción (quizás) rehaciendo la base de datos y cambiando el archivo .wsgi para que apunte a la nueva versión de la aplicación.

Cuando tenga algo liberable, etiquételo. Repare su Python setup.py y setup.cfg para implementar en el siguiente directorio /opt/myapp/myapp-tag.

4

Recomendaría revisar el proceso como se documentó en lincoln loop. Puede ir directamente a su repositorio github al django-startproject. Básicamente, el flujo de trabajo que crea django-startproject segrega el desarrollo, la prueba y la producción. Se ejecuta el servidor de dev con

manage.py runserver 0.0.0.0:8000 --settings=<Project>.conf.dev.settings

y ejecutar pruebas con

manage.py test --settings=<Project>.conf.test.settings

django-startproject instalará un archivo de requisitos para los PIP que le permitirá especificar e instalar la necesaria facilidad dependencias. Recomiendo utilizar virtualenv en combinación con django-startproject. Se puede encontrar un buen tutorial sobre el uso de virtualenv con Django here.

django-startproject también incluye un script barebones fabric.py que ayuda a la implementación en servidores remotos/en la nube.

Por supuesto, todo lo anterior estará bajo control de código fuente con svn/hg/git/lo que sea.

lo tanto, el proceso de implementación en el servidor escueto Ubuntu/Debian sería:

sudo apt-get install python-setuptools python-dev build-essential 
sudo easy_install -U pip 
sudo pip install -U virtualenv 
mkdir -p <path>/python-environments 
cd <path>/python-environments 
# Create the virtual env 
virtualenv --no-site-packages --distribute <my project dir> 
cd <my project dir> 
git clone https://github.com/<my project>.git 
cd <my project> 
# Install dependencies 
pip install -r requirements.pip 
# Run tests, setup apache, etc. 

A partir de entonces, se puede utilizar tela para implementar cambios en el servidor de producción.

Cuestiones relacionadas