Dê aos seus projetos VMs separadas (Go Vagrant)

April 10, 2013

Desculpe, isso é longo.
Tenho experimentado o Vagrant ( www.vagrantup.com ) nas últimas semanas, como preparação para alguns projetos de codificação em grupo na Universidade de Notre Dame.

Tem sido interessante enquanto eu falei (ok, preguei) sobre o Vagrant para alguns dos meus colegas para ver quantos deles têm algum nível de resistência à ideia de usar uma máquina virtual para encapsular um projeto.

Parece que algumas pessoas acham que criar uma VM para um projeto é:

  1. exagero e / ou
  2. retarda o processo de desenvolvimento. Vamos explorar essas objeções.

Objeção 1: Criar VMs de desenvolvimento para projetos é exagero

Um dos dois grandes poderes do Vagrant e ferramentas como ele é que ele cria um ambiente / configuração uniforme no qual equipes de desenvolvedores podem construir um produto juntos, preservando sua capacidade de editar os arquivos na VM usando suas ferramentas preferidas da máquina Host .

É, na visão de médio a longo prazo, uma grande vantagem para qualquer pessoa, em qualquer plataforma host (Windows, Mac, Linux Variants) ser capaz de simplesmente trabalhar na construção de recursos em vez de gerenciar os detalhes da configuração do servidor / sistema como o seguinte exemplo:

  1. Instalando corretamente o Oracle Instant Client em sua plataforma particular (verdadeiro problema no a ** se você usar uma versão debian do linux – obrigado Oracle).

  2. Obter os arquivos / definições de configuração necessários dos DBAs, colocá-los na estrutura de pastas correta e configurar as variáveis ​​de ambiente.

  3. Perdendo horas para descobrir que ‘pip install cx Oracle’ funciona com Django, mas ‘pip install cx oracle’ não.

Com o Vagrant, um desenvolvedor fornece a outro (provavelmente via Git ou algum outro sistema de controle de origem) alguns arquivos de configuração e BAM, vocês dois têm o mesmo ambiente (que tem toda a porcaria de configuração feita) e estão prontos para codificar . Sem o Vagrant, o segundo desenvolvedor tem que repetir todas as etapas de configuração como o primeiro desenvolvedor fez. Esperemos que ambos usem o mesmo sistema operacional.

Em um ambiente onde geralmente existe uma correspondência 1-1 entre desenvolvedores e projetos, esse grande poder parece menos importante, porque o desenvolvedor terá que fazer toda a configuração do servidor / sistema de qualquer maneira. Mas assim que você quiser começar a trabalhar junto com outras pessoas, esse poder é de grande valor – mesmo que demore um pouco para aprender como usar o Vagrant para configurar suas VMs de desenvolvimento.

Objeção 2: Criar uma VM de desenvolvimento retarda o processo de desenvolvimento

Sim, no começo sim.
Mas, você vai economizar muito tempo mais tarde.

No meu caso, eu estava configurando uma VM para alguns experimentos em Python / Django e, sim, demorou mais do que o necessário para apenas configurar as coisas em minha máquina local (porque eu já tinha muito disso lá de trabalhos anteriores) .

Já cobrimos como usar o Vagrant vai economizar tempo ao fazer desenvolvimento baseado em equipe, mas há outro grande poder do Vagrant (isto é, VMs de desenvolvimento) que vai economizar tempo. Esse grande poder aumenta a cada novo projeto em que você trabalha. Simplificando, é o poder do encapsulamento, ou de ‘manter todas as coisas limpas’.

A Virtualenv tornou mais viável ter vários projetos Python no mesmo sistema, permitindo o gerenciamento inteligente e a separação de ambientes Python (intérpretes + módulos de terceiros). Mas o problema era que ele apenas separava o ambiente python, não todos os ambientes do projeto (bancos de dados, sistemas operacionais, etc).

O Vagrant nos permite criar projetos verdadeiramente autocontidos de uma forma limpa e eficiente que podem residir em uma única máquina host. Se você já se viu tentando lidar com o inchaço de ter instalado MySQL, Oracle, PostgresSQL, Apache, Gunicorn, Unicorn, etc. em seu sistema, ao mesmo tempo tentando manter seus relacionamentos com seus vários projetos, tenho certeza você verá o valor aqui.