Fazendo o deploy de uma aplicação Django no Dreamhost

No post anterior, foi mostrado como instalar uma versão mais recende do Python e do Django no Dreamhost. Nesse post será demonstrado como fazer o deploy de uma aplicação Django utilizando o virtualenv.

O Dreamhost utiliza o Passenger WSGI para servir aplicações escritas em Python, por isso, o processo aqui descrito é referente ao deploy utilizando o Passenger WSGI.

Configuração do domínio

O primeiro passo é configurar um domínio para fazer o deploy da aplicação. Entre no painel de configuração de domínios e adicione um novo domínio ou sub-domínio, ou então edite a configuração de um domínio já existente.

Após inserir o nome do novo domínio ou sub-domínio, na seção “Web Options“, marque a opção “Passenger (Ruby/Python apps only)“.

Um detalhe importante é, que ao utilizar o Passenger, o caminho especificado em “Web directory” deve terminar em public. Por exemplo, se o domínio configurado é exemplo.com.br, então o caminho ficará exemplo.com.br/public.

Configuração do banco de dados MySQL

Uma vez configurado o domínio, deve ser criado um banco de dados para a aplicação. A criação do banco pode ser feita na página de gerência de banco de dados MySQL. Tenha pelo menos um hostname configurado, pois no Dreamhost não pode ser usado simplesmente localhost ao configurar o host do servidor de banco de dados na aplicação.

Deploy da apliação Django

Agora que o domínio e o banco de dados da aplicação estão criados, criaremos uma aplicação Django e faremos o deploy utilizando o virtualenv.

Primeiro é necessário criar o ambiente virtual para nossa apliação, lembrando que será feito o uso do virtualenvwrapper para nos auxiliar:

mkvirtualenv projeto

Ao executar o comando anterior, o ambiente virtual criada já será ativado, repare o prefixo () no prompt do shell:

(projeto)user@host:path/to/projeto.com.br$

Posteriormente, o virtualenv poderá ser ativado usando o comando:

workon projeto

Para completar o nome do projeto poderá ser utilizado o tab, assim como é feito para completar comandos do sistema.

Agora que temos o ambiente virtual criado, podemos instalar o Django:

pip install django

Como o Dreamhost oferece somente o MySQL como servidor de banco de dados, teremos que instalar também o driver do MySQL para Python:

pip install mysql-python

Terminado a instalação dos pacotes necessários, poderemos fazer o setup de nossa aplicação. Primeiramente devemos entrar no diretório que foi configurado o domínio, estarei utilizando o domínio projeto.com.br como exemplo.

cd projeto.com.br

Lembre-se que, como estamos utilizando o Passenger, dentro do diretório projeto.com.br deverá ter o diretório public, como foi definido anteriormente na configuração do domínio.

Agora poderá ser criado o projeto Django:

django-admin.py startproject projeto

Também deverá ser criado o arquivo passenger_wsgi.py:

touch passenger_wsgi.py

Edite esse arquivo e adicione o seguinte conteúdo:

import sys, os
 
INTERP = os.path.join(os.environ['HOME'], '.virtualenvs', 'projeto', 'bin', 'python')
if sys.executable != INTERP: os.execl(INTERP, INTERP, *sys.argv)
 
sys.path.append(os.getcwd())
os.environ['DJANGO_SETTINGS_MODULE'] = "projeto.settings"
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Nossa aplicação está quase pronta para ser rodada. Falta fazer a configuração do banco de dados e do admin. Também será criar um link simbólico para os arquivos estáticos do admin.

Configuração da aplicação

Entre no diretório do projeto:

cd projeto

E edite o arquivo settings.py, primeiro a configuração do banco de dados:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'database_name',
        'USER': 'user',
        'PASSWORD': 'password',
        'HOST': 'hostname.domain.com',
        'PORT': '',
    }
}

Primeiro definimos que utilizaremos o MySQL como banco de dados, em seguida configuramos o nome do banco de dados, nome do usuário e senha. Finalmente, é configurado o host do servidor do banco de dados, repare que devemos entrar com o hostname configurado na página de gerência de banco de dados MySQL.

Ainda no arquivo settings.py, deverá ser configurado STATIC_ROOT para que os arquivos estáticos do django admin sejam cerregados.

STATIC_ROOT = '/home/user/projeto.com.br/public/static'

Para finalizar a configuração da aplicação, devemos adicionar o django admin no INSTALLED_APPS, para isso decomente a linha:

# 'django.contrib.admin',

Com isso finalizamos a configuração do projeto. O próximo passo é configurar o arquivo urls.py descomentando as linhas:

# from django.contrib import admin
# admin.autodiscover()
# url(r'^admin/', include(admin.site.urls)),

Em seguida criaremos o link simbólico para os arquivos estáticos do django admin:

mkdir public/static
ln -s ~/.virtualenvs/projeto/lib/python2.7/site-packages/django/contrib/admin/media/ public/static/admin

Finalmente, para terminar o deploy, execute o comando syncdb para que as tabelas do banco de dados e um super-usuário seja criado:

cd projeto
python manage.py syncdb

Uma vez terminado a execução do syncdb, poderemos acessar nosso projeto no navegador. No exemplo desse post bastaria acessar a URL http://projeto.com.br/admin.

Referências

Instalação do Python 2.7.2 e Django 1.3.1 no Dreamhost

Em servidores compartilhados normalmente não é possível ter a versão do Python ou mesmo do Django de acordo com as necessidades do projeto. Porém, tendo um acesso SSH, é possível instalar, no diretório home, a versão requerida para rodar o projeto.

Como exemplo, será demonstrado como instalar uma versão do Python e do Django diferente da oferecida pelo serviço de hospedagem compartilhada do Dreamhost. No momento da escrita do post as versões do Python e do Django oferecidas são, respectivamente, 2.5.2 e 1.2.1. Serão instaladas as versões atuais que são 2.7.2 para o Python e 1.3.1 para o Django.

Além disso, será configurado o pipvirtualenv e virtualenvwrapper para facilitar manter diversos projetos e criar ambientes virtuais para atender as necessidades de cada projeto.

Antes de iniciar tenha certeza que seu usuário tenha acesso SSH. É desejável ter algum conhecimento sobre Linux para facilitar o entendimento das  etapas descritas.

Configuração inicial do ambiente

Sua conta deve estar configurada como descrito:

Primeiro, crie os diretórios necessários:

cd ~
# Criação dos diretórios raiz (e log/setup)
mkdir -pv soft run www log log/setup backup data
# Criação dos subdiretórios dentro de run (nosso FHS)
for subdir in bin etc include lib man share
do
  mkdir -pv run/${subdir}
done
# link simbólicos para manter os manuais em um local comum
ln -sv ../man run/share/man
# link simbólico dentro de log para os logs do apache
ln -sv ../logs log/vhosts

Em seguida, edite o arquivo ~/.bashrc para configurar o ambiente, adicione as seguintes linhas:

# Variável para facilitar as instalações
export RUN=$HOME/run

# Adiciona o run/bin ao PATH do sistema
PATH=$RUN/bin:$PATH

# Define os caminhos para bibliotecas
export LD_LIBRARY_PATH=$RUN/lib:$LD_LIBRARY_PATH
export LD_RUN_PATH=$RUN/lib:$LD_RUN_PATH

  Para maiores informações e outras configurações visite Unix account setup. Para instalar o Python, somente as configurações descritas são suficientes.

Instalação do Python 2.7.2

O Python precisa ser baixado e compilado, para isso basta executar os comandos:
# Diretório para baixar e compilar o Python
cd ~/soft
# Download do Python 2.7.2
wget http://python.org/ftp/python/2.7.2/Python-2.7.2.tgz
# Extrai o conteúdo do pacote
tar -zxvf Python-2.7.2.tgz
# Acessa o diretório com o conteúdo extraido
cd Python-2.7.2
# Configura a instalação, repare no prefixo informado
./configure --prefix=$RUN
# Compilação do Python
make
# Instalação do Python
make install
# Se tudo ocorreu bem, teremos o python 2.7.2 instalado
python --version

Instalação do setuptools e do pip

Para gerenciar os pacotes, será utilizado o pip. Porém para facilitar a instalação do pip será intalado o setuptools que oferece o comando easy_install. Para instalar o setuptools execute os comandos:
# Diretório para baixar e compilar o Python
cd ~/soft
# Download do setuptools para o Python 2.7.x
wget http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg
# Instalação do setuptools, repare no prefixo informado
sh setuptools-0.6c11-py2.7.egg --prefix=$RUN
Uma vez instalado o setuptools, pode-se instalar o pip executando o seguinte comando:
easy_install pip

Agora que tem o pip instalado, será mais fácil de instalar os outros pacotes.

Instalação do virtualenv e virtualenvwrapper

Para instalar o virtualenv e virtualenvwrapper, basta executar o seguinte comando:

pip install virtualenvwrapper

Como o virtualenv é uma dependência do virtualenvwrapper, ele será automaticamente instalado, pois o pip se encarrega de resolver as dependencias dos pacotes que serão instalados.

Para configurar o virtualenvwrapper, adicione as seguintes linhas no ~/.bashrc:

export WORKON_HOME=~/.virtualenvs
source virtualenvwrapper.sh

Essa configuração informa que os ambientes virtuais serão instalados no diretório ~/.virtualenvs.

Para que esse configuração tenha efeito imediado execute o comando:

. ~/.bashrc

Caso o comando anterior não seja executado, somente na próxima vez que iniciar uma sessão SSH, as configurações entrarão em vigor.

Instalação do Django

Finalmente, para instalação do Django, já que temos o pip instalado, basta executar o comando:

pip install django

Com isso teremos o Django disponível no sistema. Eu tenho a preferência de instalar o Django sempre que criar um virtualenv, pois dessa forma cada projeto pode permanescer com sua versão requerida do Django.

Maiores informações

Para maiores informações consulte as referências:

Como aprender Node.js

O que é Node.js?

Node.js é um âmbiente JavaScript que roda do lado do servidor e utiliza um modelo assíncrono orientado à eventos.

Sua engine utiliza a V8 JavaScript Engine do Google, que roda utilizando apenas uma thread, porém, toda operação de I/O é assíncrona oferecendo, assim, nenhuma espera para as operações de I/O de outras requisições.

Um aplicação Node.js pode gerenciar milhares de conexões concorrentes utilizando uma quantidade mínima de recursos do sistema.

Como aprender Node.js?

Atualmente, existe uma quantidade boa de materia a respeito do Node.js. Segue uma lista com alguns materiais muito bons para iniciar os estudos:

Caso você tenha mais alguma sugestão de material para iniciar o estudo sobre o Node.js, deixe um comentário.

Promote JS!

Promote JS! é um movimento para ajudar a disseminar uma documentação atual sobre a linguagem JavaScript. A documentação que está sendo divulgada nesse movimento é a documentação encontrada no Mozilla Developer Center e pode ser acessada clicando na imagem abaixo.

JavaScript Reference, JavaScript Guide, JavaScript API, JS API, JS Guide, JS Reference, Learn JS, JS Documentation

No site do movimento é possível fazer um tweet para ajudar a divulgar.

A documentação é bem completa com explicações, exemplos, dicas e muito mais.

Python para Desenvolvedores – Segunda Edição

A segunda edição do livro Python para Desenvolvedores de Luiz Eduardo Borges está disponível para download. Confira a nota de lançamento:

A segunda edição do livro (ISBN 978-85-909451-1-6, 360 páginas), voltado para desenvolvedores que já tem conhecimento de programação, incluindo desde a criação de interfaces com usuário, computação gráfica, aplicações para internet e sistemas distribuídos.

Você pode fazer o download ou ir para a página oficial.

Boa leitura!

Django no Dreamhost, agora é “oficial”!

O Dreamhost anuncia que “oficialmente” está suportanto aplicações Django. Para ter sua aplicação rodando basta a simples execução de um script que fará todo o trabalho pesado para que sua aplicação Django seja implantada no servidor.

Para execução do script, primeiramente será necessário editar algumas configurações no dominio hospedado.

Configuração do dominio

Será necessário ativar o passenger para seu dominio, para isso basta seguir esses passos:

  1. Abra a página de configuração dos domínios do painel de controle e edite o domínio desejado.
  2. Vá até a seção “Users, Files, and Paths”, e assegure que o web direcotry do seu dominio termine com “/public”, por exemplo, “/home/usuario/elyezer.com/public”.
  3. Após a modificação anterior, vá até a seção “Web Options” e marque o checkbox para ativar o “Passenger”.

Após as modificações anteriores, basta executar o script para poder fazer o deploy de sua aplicação.

Utilizando o script para o deploy da aplicação Django

Agora será necessário que você acesse seu servidor via SSH, e após entrar no diretório da sua aplicação, execute os seguintes comandos:

wget http://wiki.dreamhost.com/django-setup.py
python django-setup.py

O script irá orientá-lo durante o restante do processo de configuração de sua aplicação. Para maiores informações, visite a página do wiki do Dreamhost sobre o Django.

Conclusões

Para quem já havia feito o deploy anteriormente de uma aplicação Django no Dreamhost perceberá que o processo de configuração está muito mais simples, quase como um One Click Install. Com isso o Dreamhost anuncia que está suportando “oficialmente” aplicações em Django em sua hospedagem.

Ainda não tem um servidor de hospedagem?

Aproveite esse novo recurso oferecido pelo Dreamhost e cadastre-se agora mesmo. Utilize o código promocional DHDJANGO para obter um desconto de até $90 dólares ao se cadastrar.

TextFlow 0.2.9 Lançado

A versão 0.2.9 do TextFlow foi lançada! Além de novos recursos para o editor, este lançamento traz como novidade o site oficial do projeto que pode ser acessado em http://textflowproject.org.

No site do projeto você poderá saber mais sobre os recursos do editor, o time de desenvolvimento, como fazer o download e também sua documentação que pode ser encontrada em http://docs.textflowproject.org.

Confira as novidades:

Novo navegador de arquivos: mais organizado e com alguns recursos extras.

Goto line: uma barra, semelhante a barra de pesquisa, para posicionar o cursor em uma linha escolhida.

Mais snippets: novos snippets incluídos.

Abrir arquivos em novas abas diretamente do Nautilus: se o Textflow já estiver aberto novos arquivos serão abertos em novas abas no editor que estiver executando.

Mais ferramentas para edição: converter tabs em espaços e vice-versa e mover linhas para cima ou para baixo.

Gerenciador de Linguagens: nessa versão foram incluídos os primeiros recursos para linguagens específicas. Agora não só os snippets são separados por linguagens, qualquer funcionalidade pode ser customizadas para funcionar apenas em um tipo de arquivo. O TextFlow identifica qual a linguagem da aba atual e consegue alterar seu estado para que determinados recursos fiquem disponíveis para o usuário.

Nas próximas versões cada vez mais linguagens deverão ganhar novos recursos e também será possível no futuro a criação de plugins para as linguagens pelos usuários.

Documentação: está disponível a documentação do TextFlow para que o usuário conheça suas funcionalidades e possa aprender e tirar algumas dúvidas sobre o editor.

Faça o donwload do editor e confira você mesmo as novidades.

Cliente IRC Online para acessar o #mandriva-br

A Comunidade Mandriva Brasil conta com um canal de irc na rede frenode.net, o #mandriva-br. Nesse canal é possível bater um papo, falar sobre o Mandriva Linux ou mesmo buscar ajuda para solução de problemas com o uso ou configuração da distribuição.

Para acesso ao canal você precisa de um cliente irc, para o desktop contamos com vários clientes como por exemplo o Xchat. Para aqueles que não querem instalar um cliente de irc em sua máquina, ou mesmo aqueles que só querem tirar alguma dúvida, agora é possível acessar o canal online através do endereço http://irc.mandriva-br.org basta esperar o cliente ser carregado e digitar um nick e entrar. Automaticamente você já estará no canal da Comunidade Mandriva Brasil e poderá conversar com os outros participantes do canal.

No tópico do canal é possível encontrar algumas informações e link para download do Mandriva Linux, é sempre bom conferir o tópico do canal.

Aproveite mais esse recurso oferecido pela Comunidade Mandriva Brasil.

Até a próxima.

Planeta Mandriva Brasil de cara nova!

Ontem e noite foi lançado o novo design do Planeta Mandriva Brasil. Com o novo design está mais fácil a leitura e visialização dos posts já que foi utilizando um design clean.

Quem quiser ter seu blog inscrito no Planeta Mandriva Brasil basta acessar essa página e seguir as instruções para saber como participar.

O código do Planeta está hospedado no Google Code, caso encontre algum problema com o layout sinta-se livre para abrir um bug na pagina do projeto.

Muitas novidades ainda estão por vir. Aguardem!

Pra mim o IE6 já morreu!

Um pouco de história antes só pra começar o post bem contextualizado. O IE6 foi lançado em 27 de agosto de 2001 com suporte parcial ao CSS 1. Bom acho que com essa longa história já da pra comentar algo em cima.

Vou citar alguns pontos:

  • O browser foi lançado em 2001, disso podemos tirar as seguintes comparações: a primeira especificação a tornar recomendação oficial pelo W3C foi o CSS 1 em dezembro de 1995, para completar temos que o CSS 2 foi oficialmente especificado pelo W3C em maio 1998, com isso já podemos perceber que, em agosto de 2001, o IE6 tinha suporte parcial ao CSS 1 isso 3 anos depois da especificação do CSS 2. A segunda comparação, em 2005 o termo AJAX foi firmado o que resultou na melhoria da experiência de uso dos aplicativos web, porém, já fazia 4 anos que o IE6 havia sido lançado. A terceira (a melhor) comparação: hoje já faz 8 anos que o IE6 foi lançado e, até hoje, não fornece suporte completo ao CSS (já existe a especificação do CSS 2.1 ainda não ofical), e já estão comentando de CSS 3. Para completar o IE7 (lançado em 2006) ainda não está com suporte aos padrões assim como Firefox, Safari, Opera, Chrome e outros oferecem.
  • Não tem suporte à imagens PNG transparentes, para que um site exiba PNG transparentes no IE6 precisa ficar usando Javascript para corrigir esse problema, ou seja, código executando em sua maquina para trazer uma experiência melhor de navegação.
  • Todo, e qualquer desenvolvedor web, odeia fazer com que o site seja compatível com o IE6 por conta dos pontos anteriormente citados. Temos que ficar encontrando hacks e outras maneiras para driblar os problemas por conta do suporte parcial ao CSS e, consequentemente, ao padrões web.
  • Hoje em dia existem muitos browsers de excelente qualidade, rápidos e cheios de recursos, complementos e, de quebra, porém não menos importante com ótimo suporte aos padrões web. Mesmo o IE7 já está de bom tamanho. Por que não se atualizar? Ou mesmo quebrar paradigmas?

Agora que temos alguns pontos para debater, vamos lá. O número de usuários do IE6 vem diminuindo, e isso não está bom? Não, a quantidade de usuários que ainda utilizam essa versão do IE ainda é muito grande para que simplesmente os desenvolvedores, conscientes como devem ser, abandonem essa porção de usuários. E isso acarreta no seguinte problema, enquanto os desenvolvedores preocupados em manter o site acessível para todo mundo, ficam gastando energia e esforço na correção de problemas e procurando soluções e hacks para melhorarem a experiência do usuário que usa o IE6, eles poderiam estar buscando melhores formas de usar as tecnologias atuais e oferecerem serviços ainda melhores para todos os usuários de aplicativos web.

Eu gostaria de entender os motivos e o porquê, ainda hoje, usuários continuam a usar o IE6. Com tantos recursos e novidade surgindo, por quê ainda insistem em não experimentar uma melhor navegação? Eu realmente não consigo navegar como há alguns anos atrás, para mim esse tipo de navegação que tínhamos antigamente não dá mais!

Por isso resolvi tomar a seguinte decisão, a partir de hoje, não vou mais procurar em atender mais os usuários do IE6. Mas espera aí, você não disse que os desenvolvedores web são preocupados com a experiência do usuário? E vai simplesmente ignorar esses usuários que ainda insistem a usar um navegador mais antigo? Sim, mas não totalmente, assim como a Apple já está fazendo, e como sou alguém que preza pela boa experiência de uso dos sites que desenvolvo, vou gentilmente sugerir que eles atualizem ou troquem (melhor opção pra mim) seu navegador web, quando o site for acessado por algum usuário do IE6. E como cada um sabe o que quer, vou deixar uma versão mais básica para que o usuário não fique insatisfeito ao visitar o site e deseja continuar usando o IE6. Caso ele prefira usar um navegador com melhor suporte, buscarei implementar a melhor experiência possível para que o usuário não saia assim tão triste por trocar de navegador, já que ficou usando ele por 8 anos. Não sou tão ruim assim. :)

O computador veio pra facilitar a vida de muita gente, por isso sempre existe algo sendo inventado e melhorado. Mas isso só ocorre quando os usuários realmente desejam. Não adianta nada fazermos um aplicativo web bem acabado, procurando a melhor experiência para o usuário se ele não pode ter isso, consequentemente, temos que procurar uma solução não completa.

Com diz uma frase: “Me ajuda a te ajudar!” Isso que vim pedir aqui hoje.

Referências:

Mais informações sobre o assunto:

Até a próxima.