Archive

Archive for the ‘Web Developer’ Category

Criando um Makefile para Aplicações Django

July 28th, 2009 victor.pantoja No comments

Na empresa em que trabalho, criamos a excelente cultura de automatizar tudo que pode ser automatizado.

Nessa filosofia, apresento aqui a maneira que me parece bem interessante de rodar uma aplicação django:

$make runserver

Bem prático, não?

Tudo que fiz foi criar um makefile com a seguinte macro:

runserver:
        @echo "Running aplicacao seu_dominio:3001..."
        @export PYTHONPATH=`pwd`:`pwd`/dango_project:$$PYTHONPATH && \
                export DJANGO_SETTINGS_MODULE=dango_project.settings.dev && \
                cd dango_project && python manage.py runserver seu_dominio:3001

Explicando melhor, imagine que você criou o django project projetoTeste. Imagine agora que, dentro deste projeto, você criou um diretório settings contendo o arquivo dev.py (settings para ambiente de desenvolvimento: lembrando que o settings.py pode ter o nome que você quiser! Recomendo apenas que faça sentido).

Substitua em runserver a variável aplicacao pelo nome fantasia que você quer dar para o seu projeto e dango_project por projetoTeste.

runserver:
        @echo "Running minha aplicacao teste teste.com:3001..."
        @export PYTHONPATH=`pwd`:`pwd`/projetoTeste:$$PYTHONPATH && \
                export DJANGO_SETTINGS_MODULE=projetoTeste.settings.dev && \
                cd projetoTeste && python manage.py runserver seu_dominio:3001

Claro que o Makefile e o projetoTeste está no mesmo nível (mesmo diretório pai).

Existem diversas maneiras de se criar esse Makefile e não vou tomar o vosso tempo com isso.

O runserver é legal para aplicações locais. Para coisas sérias, recomendo o WSGI.

Categories: Web Developer Tags: , ,

Configurando o WSGI e o Apache para Renderizar Estáticos do Django

July 28th, 2009 victor.pantoja No comments

Levantei uma aplicação simples que usa o admin do django com algumas alterações de CSS e template. Crei um diretório /media no meu projeto para colocar os arquivos CSS que criei.

Tudo rodando muito bem com o tradicional runserver 3001 (costumo criar um make para isso).

Claro que chamar uma URL passando a porta fica, no mínimo, deselegante. Solução: usar mod_proxy, mod_python ou WSGI. Optei por este último por diversos motivos que fogem do escopo deste post.

Configuração feita, para minha surpresa o CSS não estava sendo encontrado… Tentei alterar as configurações do WSGI várias vezes, e nada. Acabei percebendo que o problema não era apenas com o CSS, mas como tudo que fosse estático (normalmente, dentro de /admin_media ou /media)

Depois de uma batalha de algumas horas com o WSGI e uma dica no grupo de discussão do Django, consegui configurá-lo para funcionar bem. O problema era basicamente o apache, que procurava o diretório de media em seu docroot.

A solução que escolhi está postada abaixo (preservei algumas informações e removi alguns tabs para caber na tela):

<VirtualHost *:80>
        ServerName seu_dominio_.com

ErrorLog "|/usr/sbin/cronolog /usr/local/logs/dir/apache/projeto_%Y%m%d_error.log"
CustomLog "|/usr/sbin/cronolog /usr/local/logs/dir/apache/projeto_%Y%m%d_access.log" combined

        DocumentRoot "/usr/local/django/projeto"

        Alias /media/ "/usr/local/django/path_deploy/projeto/media/"

        <Location "/media/">
                SetHandler None
                <LimitExcept GET>
                        Require valid-user
                </LimitExcept>

                Order Allow,Deny
                Allow from all
        </Location>

Alias /admin_media/ "/var/lib/python-support/python2.5/django/contrib/admin/media/"

        <Location "/admin_media/">
                SetHandler None
                <LimitExcept GET>
                        Require valid-user
                </LimitExcept>

                Order Allow,Deny
                Allow from all
        </Location>

        WSGIScriptReloading on
        WSGIScriptAlias / /usr/local/django/path_deploy/projeto/django.wsgi
        WSGIDaemonProcess nome_do_deamon user=usuario group=grupo processes=2 threads=25 stack-size=524288

        <Directory /usr/local/django/path_deploy/projeto>
                Order deny,allow
                Allow from all
        </Directory>

 </VirtualHost>

Claro que eu precisei criar um usuário para a aplicação. Sempre crio um usuário específico para cada aplicação que desenvolvo (boa prática).

Só uma observação: sempre que o apache receber uma requisição /media ou /admin_media ele irá tratar sozinho, sem repassar para a aplicação. Isso pode ser interessante para questões de carga na aplicação.

Categories: Web Developer Tags: , , ,

Passo a Passo para Criação de seu Próprio Domínio

June 8th, 2009 victor.pantoja No comments

Quando comecei a pensar em criar meu primeiro Blog, a única certeza que eu tinha era que iria ter meu próprio servidor. De preferência, um sem configuração nenhuma.

Procurando indicações, cheguei ao Slicehost. Neste host, você escolhe dentre vários planos mensais e recebe um virtual host com um servidor à sua escolha. Optei pelo de $20, para começar a explorar os serviços.

Relizado o passo a passo, após alguns minutos sua VM (slice) está criada com o servidor escolhido. Neste momento, a máquina funciona apenas com os serviços básicos.

O passo seguinte é escolher um domínio para o site. Eu usei os serviços do domain.com. Muito simples, em poucos minutos você tem seu próprio dominio!

Até agora, tudo tranquilo. A minha dificuldade foi associar o IP que o slicehost forneceu para meu slice com o domínio que eu registrei no domain.com. Parecia simples, mas não achei uma boa referência sobre isso. Seguem os passos:

  1. Clicar em DNS > Reverse DNS
  2. No campo “Record”, coloque o seu domínio com um “.” no final (ex. yourdomain.com.) e clique em Update
  3. No menu DNS > Domain, cadastre o seu domínio (mais uma vez, com o “.” no final). Ele aparecerá na lista com o status “Enabled”
  4. Clique em “Records” na lista de oções correspondentes ao dominio cadastrado em 3.
  5. Você adicionará 4 records: dois do tipo A e dois do tipo S. Observe o “.” no campo “Name”
  6. Name Data Type Actions
    victorpantoja.com. 174.143.235.149 A edit | delete
    www 174.143.235.149 A edit | delete
    victorpantoja.com. ns2.slicehost.net. NS edit | delete
    victorpantoja.com. ns1.slicehost.net. NS edit | delete

Feito isso, volte para sua conta no domain.com, clique no domínio que você deseja associar e clique em “Update Name Servers”. Coloque os dominios (1 de cada vez) ns1.slicehost.net e ns2.slicehost.net.

Pronto! Seu domínio já está associado ao IP. Eles informam que pode demorar até 72h, mas o meu foi criado em menos de 1 minuto.