Configuración de entornos de desarrollo múltiples

Soy un desarrollador en solitario que trabaja en un proyecto web típico (Django + PostgresSQL) utilizando Eclipse como mi IDE y Subversion para el control de código fuente. Hasta ahora he estado trabajando en una sola máquina de desarrollo que he configurado yo mismo. Recientemente, me han pedido que trabaje en el sitio del cliente y también ha habido algunas ocasiones en las que hubiera sido útil tener acceso al sitio en casa. Estoy pensando en cuál es la mejor manera de configurar esto. Desafortunadamente, por diversas razones, una computadora portátil no es una solución viable, por lo que las soluciones en las que estoy pensando son:

  1. Instalar todas las herramientas de desarrollo necesarias en cada máquina (PostgresSQL, Eclipse, Django, Python + librariries, etc.) y mantener el código sincronizado usando SVN.
  2. Configurar algún tipo de acceso VNC en mi máquina de desarrollo y acceder a ella de forma remota para hacer el trabajo.
  3. Crear una máquina virtual y copyr la image entre todas las máquinas usando un pen drive.

La ventaja de # 1 es el desarrollo local rápido, pero luego tengo que configurar todas las herramientas en cada máquina y manejar sus configuraciones y mantener todo sincronizado. Además, para compartir el código entre las máquinas, tendría que comprobarlo en SVN, incluso si no está "listo". La solución # 2 resuelve este problema, pero a expensas de una experiencia de IU más lenta. Finalmente, el # 3 parece una buena solución, pero no estoy seguro de si realmente puedo include una image virtual en un pen drive y no estoy seguro del performance.

Supongo que realmente no hay una respuesta "correcta", pero estoy sugiriendo esto para get ideas y sugerencias de personas que han estado haciendo esto más time que yo. 🙂

Yo diría que la opción número 1 sigue siendo la mejor. Asumiría que solo tienes una computadora en casa y puedes trabajar con ella, por lo que la configuration debería ser solo una vez.

Sin embargo, tienes razón, el time de configuration es bastante tedioso, sin embargo, en realidad compensa la lenta IU de usar algo como VNC para trabajar de forma remota. Su problema con el código de confirmación que puede no funcionar es válido, sin embargo, si le preocupa, simplemente comente el código roto y asegúrese de que comstack su última versión.

Trabajar a través de un repository es el método más eficiente, especialmente si está trabajando en un proyecto bastante grande. Es una lástima que no tenga una computadora portátil, la configuration de todas las herramientas en una computadora portátil hace que la encoding / el trabajo desde cualquier lugar (siempre que tenga una connection a Internet) sea especialmente conveniente.

De todos modos, la opción 1 es mi preference, espero que ayude.

Si las máquinas tienen puertos e-sata, esto podría ser lo que estás buscando. ¿Por qué no hacer una combinación de uno y tres, crear un vm base desplegarlo en todas sus máquinas a la vez y mantener el código sincronizado mediante svn u otra herramienta de synchronization? Si no quiere controlar constantemente el control de origen, algo como Drop Box le permitiría mantener sincronizados los directorys de trabajo siempre que no le importe tener un tercero que pueda ver su código aunque probablemente hayan ganado no te molestes Otra opción sería crear una twig "operativa" en la que siempre ingrese y salga, y solo mover el código al tronco cuando esté lo suficientemente estable y algo terminado.

Usa control de versiones Si le preocupa comprobar el código "incompleto", utilice las twigs (twig para el desarrollo) o las tags (marque el código "completado"). El trabajo "en curso" comprometedor tiene sus ventajas (deshacer bien, ayuda a escribir buenos loggings de cambios, etc.). Además, documentar su process de "configuration" para que sea más fácil de reproducir también es bueno.

Además, para compartir el código entre las máquinas, tendría que comprobarlo en SVN, incluso si no está "listo".

Git soluciona mucho este problema de forma explícita. En cuanto al desarrollo fuera de línea, deberías probar Git. Hace que la gestión de repositorys fuera de línea sea realmente simple. Y debido a su architecture distribuida ofrece un puñado de comodidades cuando se mueve entre entornos. Fue diseñado para hacer que el flujo de trabajo se registre en el check-in temprano a menudo. Creo que encontrarás que ofrece cosas que SVN no ofrece.

Por ejemplo, puede mantener repositorys diferentes para diferentes entornos y fusionar fácilmente los cambios entre ellos. De esta forma, puede tener repositorys incluidos con sus imágenes de VM. Y pueden divergir dramáticamente pero aún así ser fácilmente fusionarse nuevamente.

La fusión es lo que hace que Git sea un sueño para usar.

Mire estas dos presentaciones para una buena descripción general.

Linus Torvalds en Git (más sobre la filosofía de layout de Git)

http://www.youtube.com/watch?v=4XpnKHJAok8

Presentación de Randall Schwartz (descripción más práctica)

http://www.youtube.com/watch?v=8dhZ9BXQgc4

Ejecutar una máquina virtual desde una unidad de pen-drive (incluso una rápida, que la mayoría no lo son) va a ser muy divertida.

Podrías copyrlo localmente o usar una unidad de disco duro USB, o incluso una solución como Live Mesh para sincronizarla.