30 de abril de 2013

Um ambiente Web2py novo a cada projeto

A virtualização veio pra ficar no mundo do desenvolvimento de software.

Se você programa em Python e ainda não usa virtualenv, sugiro dar uma pesquisada e começar a usar agora mesmo.

O maior benefício dele é isolar os ambientes, de modo que cada projeto seu não seja afetado pelo outro. Trocando em miúdos, cada ambiente virtual tem seu próprio conjunto de bibliotecas (site-packages) independente. Deste modo, você pode usar versões diferentes da mesma biblioteca em projetos separados. Um sem atrapalhar o outro.

Essa facilidade também vai para os frameworks. Quem desenvolve em Django está mais acostumado a isso, mas parece que a turma do Web2py continua deixando seus códigos fonte dentro do diretório web2py/applications/minha_app e sofrendo um pouco com isso.

Abaixo segue um script que eu fiz para criar ambientes Web2py novinhos em folha, usando o modelo de aplicação que você quiser.

Ele faz o seguinte:
  1. Instala o web2py no seu virtualenv
  2. Cria uma árvore de diretórios para o seu projeto, com lugar para documentação e código fonte.
  3. Cria sua aplicação usando um modelo que você quiser.
  4. Inicializa um repositório git no seu projeto e já dá o 1º commit pra você.
  5.  Cria um arquivo .gitignore padrão.
Para fazer tudo isso, existem premissas:
  1. Um ambiente virtualenv criado. (Esse passo não é necessário, mas altamente recomendado)
  2. Você precisa ter um diretório com os seguintes arquivos dentro:
    • O web2py baixado zipado
    • Um arquivo _gitignore que será usado como o .gitignore do seu projeto. 
    • Um arquivo que servirá de modelo para sua aplicação. Por padrão, o Web2py usa o welcome.w2p mas você pode usar um personalizado, o que eu recomendo. O importante é que esse arquivo com extensão w2p é, na verdade, um arquivo tar.gz com a extensão modificada. Então, a aplicação que você for usar como modelo, precisa estar compactada nesse formato.
Para usá-lo, use o seguinte comando:
$ new_web2py_project.sh minha-app

Só isso. Abaixo, segue o resultado:
(minha_app)±master:viniciusban minha_app $ new_web2py_project.sh minha_app


So, let's create a brand new Web2py environment to minha_app.

Installing Web2py from source... OK.
Creating project tree for minha_app... OK
Creating scaffolding app minha_app... OK
proj
├── doc
└── src
    └── web2py
        └── minha_app
            ├── controllers
            ├── cron
            ├── languages
            ├── models
            ├── modules
            ├── static
            │   ├── css
            │   ├── images
            │   └── js
            └── views
                └── default
Initializing your git repo... OK
Notes:
1) Your project root dir is proj/ and it's a git repo. I already issued your 1st commit for you
2) Customize proj/.gitignore to your needs
3) Put your documentation in proj/doc/
4) Web2py will execute your application from proj/src/web2py/minha_app/

Go ahead! Start coding for minha_app ;-)

(minha_app)±master:viniciusban minha_app $ 

Se você quiser um modelo de aplicação scaffolding, dê uma olhada na my_welcome, que divide o arquivo db.py em várias partes, facilitando a organização do projeto.

Agora, o script em si:
Muita gente pergunta: "Mas eu vou ter um Web2py separado para cada projeto?" Sim, vai.
Daí, outros perguntam: "Isso não vai consumir muito espaço no meu HD?" Sim, vai. Mas se você está com problema de falta de espaço no HD para projetos que te rendem dinheiro, sugiro comprar mais HD.

A questão é você ter liberdade de trabalhar sem atrapalhar o outro projeto que funcionava numa versão anterior, e que não precisa ser mexido agora.

Eu sou Vinicius Assef, um programador do século passado que gosta de Python, pratica Lean Development e acredita em Deus. Você pode me contactar por email ou twitter.

Nenhum comentário:

Postar um comentário

Marcadores