sábado, 5 de junho de 2010

Fabric


Em uma tarefa de deployment de uma aplicação em servidor LAMP no estágio, eu e meu g gerente tivemos a idéia de usar o Fabric, ferramenta de deployment escrita em Python, opensource e que seria em tese o equivalente ao Capistrano para o Rails.

Resumindo, o Fabric é uma biblioteca Python e uma ferramenta de linha de comando para o uso de SSH para a implantação do aplicativos ou administração de tarefas de sistemas.




Ele fornece um conjunto básico de operações para executar comandos shell localmente ou remotamente (normalmente ou via sudo) e fazer o upload / download de arquivos, bem como funcionalidades auxiliares, tais como prompt de usuário que está executando para a entrada, ou abortar a execução.

Porem, pesquisando sobre assunto, podemos ver poucos posts de blogs e informação disseminada sobre o assunto, em relação ao seu irmão do mundo Rails.

Vendo a documentação , podemos notar que o projeto ainda esta no começo(v0.9), e tem muito potencial, devido ao poder que o Python proporciona á ferramenta.

Basicamente você instala o Fabric no Ubuntu 9.10(Karmic)através do comando:


Automaticamente o Fabric já esta no seu $PYTHONPATH e com isso a proxima tarefa seria criar um arquivo fab da seguinte forma:


Dentro do fabfile.py você deve escrever suas tarefas em Python.Sendo assim dentro deste arquivo você pode mesclar ShellScript com codigo Python, solução matadora em ambiente Linux(Ubuntu).

Estando no mesmo diretorio do seu fabfile.py, você pode executar suas tarefas Fabric(metódos python) da seguinte forma:



No tutorial basico encontrado no site, existe um bom exemplo de um script simples para fazer um deployment e montar um pack com a aplicação alem de rodar os testes do Django.



Partindo desse script, a idéia era fazer o deployment de varios build's sucessivos, de forma incremental, baseado nos seguintes requesitos :
  • Tags do controle de versão , no caso, o Mercurial(HG)
  • Cobrir e rodar os testes da aplicação
  • package com timestamp, versionando assim os releases
  • Deployment em varios servidores(staging, production)
  • Restart do Apache e do Memcached.

Alem disso, uma boa estrategia no caso de ocorrer algo de errado no deployment de uma versão, ou até na versão atual, seria uma função de rollback, como acontece no Capistrano que resgataria o server para uma versão estavel da aplicação.

Ao meu ver, qualquer tarefa administrativa pode ser executada de forma automatica usando o Fabric, mas claro, não existe bala de prata, e por isso devemos sempre colocar na balança os motivos e desvantagens de usar alguma tecnica.

Algumas coisas como gerenciar o firewall, ou proteger de bruteforce attacks, seriam simples, bastando apenas a criação de uma fab_task que manipula o iptables,ou usa alguma ferramenta como o UFW Uncomplicated Firewall.

Em soluções onde ocorrem grandes e as vezes devastadoras mudanças de DBschema, o uso do SOUTH para criar migrations é interessante, tornando as modificações do DB transacionais ,consistentes e claro ,menos doloridas.

O Fabric tambem pode ser alternativa para o deployment de aplicações escritas em outras linguagens da plataforma LAMP, como:
  • Perl
  • PHP
  • Python
  • Erlang¹
Fanatismos á parte, deve se levar em conta o fato de que no Rails e para o mundo Ruby ,já existe uma otima ferramenta, o Capistrano.

Fabric ao meu ver tem potencial para atuar como peça importante na pilha LAMP, sendo tambem alternativa para automatização de tarefas em outras plataformas como Java² e PHP/MySQL.

Erlang¹: ver LYME stack, Linux/Yaws/Mnesia(CouchDB)/Erlang

Referencias:

Marcadores: , , , , , , , , ,

segunda-feira, 22 de março de 2010

E a cobra fumou!!!!!

Apesar de ter ouvido falar muito do Python, como toda pessoa que vem do Java, e que conhece bem o ecossitema de bibliotecas e frameworks , olhava meio de "cara feia" para a linguagem.Usando Ubuntu, e fussando em blogs e artigos de desenvolvimento Web percebia que ele era muito usado e melhor, muito util.





Me apeguei a estudar o Jython, versao portada para gerar bytecodes e rodar na JVM. Como gosto de linguagens e ja tinha experimentado(e gostado demais por sinal!) Groovy, Ruby(JRuby) , Clojure, JavaFX, por puro preconceito e ignorancia apenas, tornei meu foco apenas para a integração, e as informações mais famosas e "hypes".






Eis que fui encubido de estudar Python/Django durante essa semana para um projeto no estagio. Recebi uma biblia(Learning Python da O'Reilly), e muita informação sobre comunidade, projetos na pratica e produtividade em uma conversa com meu gerente.




Fuçando a linguagem, revendo coisas que ja tinha lido por alto, e claro, buscando informação na comunidade, no Google e code snippets, em menos de uma semana alem de me viciar na linguagem, vi que ela é uma poderosissima arma no arsenal de qualquer desenvolvedor, desde a infraestrutura (redes, sistema de arquivos), parsers) até a web(otimos frameworks e api's).


Vindo do estudo e uso do Grails, Rails, VRaptor e sabendo dos prós e contras de cada mundo, olhei para o Django com admiração após brincar um pouco com o framework.




O Django desde o começo é simples e o tutorial no site do projeto te mostra o poder que ele tem. Alguns livros como Django Pratical Projects, tem projetos simples com requisitos usados no dia-a-dia da maioria dos projetos web. É a real historia do ver pra quer.


Pra quem vem do mundo OO, o Python tem todo o suporte ao paradigma, te dando um conjunto grande e robusto de libs integradas ( Redes, Threads, Arquivos, Strings, Coleções...) nas mais diversas areas de dominio.





Alem de uma linguagem que permite construções rapidas, curtas e mortais, temos diversas caracteristicas do mundo funcional como funções map(), reduce(), filter() alem de manipulação de listas como no LISP.


Para quem se aventura no mundo LISP, ou adora coisas como metaprogramação no Ruby e no Clojure, o Python possui ótimo suporte a reflexão alem de menor rigor no uso de ; e {}.


Me atreveria a dizer, com a minha pouca experiencia na linguagem, que ela seria um meio-termo entre o Java e o LISP.

Nas universidades Stanford(berço da Sun e da Google), Michigan(berço dos algoritmos geneticos) e muitas outras, o Python é a linguagem base nos cursos de Ciencia da Computação, pela sua expressividade( boa pra codar algoritmos de forma quase que em lingua natural), facil aprendizado e vasto conjunto de bibliotecas.




Empresas como a NASA, e a Google usam Python em muitos sistemas.A Google inclusive emprega o criador da linguagem, Guido Von Rossum e tem diversos projetos importantes codados na linguagem como Youtube, AppEngine, LLVM(Unladen Swallow) entre outros.


No mundo OpenSource o GIMP e o Blender , respectivamente, um editor de imagens completo com recursos equivalentes ao do Photoshop e um editor/modelador 3D poderoso, são aplicações escritas na linguagem e que possuem integração com plugins de terceiros tambem escritos em Python.


Fatores como produtividade na web(Django,Pylons), comunidade opensource(documentação/foruns/suporte) , facilidade no aprendizado e poder nas abstrações fazem valer a pena estudar e ter um contato mais intimo com essa linguagem.


Com certeza alem de te tornar um programador melhor e mais versatil , ele tambem sera uma fonte de inspiração e diversão na hora de programar.




OBRIGADO PELO SEU TEMPO!

Marcadores: