Apos todo o trabalho de da implementacao e testes do projeto, e hora de colocar ela no ar, o processo de deploy pode ser simples, mas e trabalhoso e, em alguns caso repetitivo... opa, repetitivo e simples? deve ter um jeito de simplificar isso nao? Tem sim, e se chama Fabric!Fabric e uma ferramenta feita em Python, que lhe permite escrever scripts para automatizar tarefas repetitivas. Ele possui varios metodos para executar comandos shell como um usuario normal ou como superusuario (via sudo) e realizar upload e download de arquivos. Todos estes comandos podem ser executados localmente ou em servidores remotos e uma ou em multiplas maquinasTalk is cheap, show me the code!Outros artigos que vi por ai, apresentava o Fabric de forma muito superficial, ou mostrando os as suas funcionalidades de forma isolada, senti falta de um script que mostrasse de forma simples e direta o seu poder, e dai criei o django-fabric!O projeto que tem como objetivo, atraves de um comando do fabric, colocar no ar um site feito em django, utilizando como servidor HTTP, o Nginx e Gunicorn.Como eu uso?Bom a primeira coisa a se fazer e alterar, dentro do arquivo fabfile.py na pasta deploy, as variavies env.user e env.password para o usuario cadastrado no seu servidor (por razoes obvias, este usuario deve ter permissao de sudo).Apos a alteracao do usuario e so executar o comando fab setup. Sera atualizado o sistema, instalado nginx, dependencias do python e o projeto que esta no mesmo repositorio da app (e feito um clone do repositorio, forcando com que o codigo esteja de fato no "comitado")Qualquer alteracao no codigo do projeto, e so rodar o comando fab deploy, que os comandos relacionado a atualizacao da aplicacao serao enviados e o gunicorn sera atualizado.Proximos passosEsse projeto ainda tem muito que amadurecer e claro, estou pensando em adicionar uma serie de outras funcionalidades como a execucao de migrations, compressao de estaticos e outras coisas. Se voce tiver alguma necessidade, crie uma issue no projeto, eu faca um fork e faca voce mesmo :) Ha um tempo atras vi um post em um blog que dava algumas dicas para desenvolvedores Django iniciantes, bom ai vai a minha versao, em portugues, e com alguns comentarios que acho interessantes.Os posts estao ficando bem maiores do que eu imaginei, vou publica-los em partes, para iniciar serie, a primeira parte:Evite hardcodesPrimeiramente, se voce nao sabe o que e hardcode, clique aqui!Hardcode no settings.pyE bem comum ver no codigo especialmente nas variaveis dos settings MEDIA_ROOT e TEMPLATE_DIRS utilizar o caminho absoluto de um diretorio do sistema.TEMPLATE_DIRS = ( "/home/html/project/templates",)MEDIA_ROOT = "/home/html/project/appmedia/"Esse tipo de pratica dificulta a manutencao do sistema, especialmente quando o projeto esta sendo migrado de um servidor para outro, ou simplesmente passando o projeto da maquina de desenvolvimento para a producao, sempre que uma mudanca dessas e feita, e necessario alterar o conteudo destas variaveis.O ideal e, atraves do metodo os.path.realpath, pegar o endereco absoluto do arquivo settings.py, e a partir deste valor, incluir os enderecos necessarios, como e visto abaixo:import osSITE_ROOT = os.path.realpath(os.path.dirname(__file__))MEDIA_ROOT = os.path.join(SITE_ROOT, 'appmedia')TEMPLATE_DIRS =