Passo-a-Passo web2py, 7º (e último) passo

Depois de uma longa espera finalmente chegou o último passo da nossa jornada pelo web2py. Primeiramente, eu gostaria de me desculpar pela demora deste último passo. Os meus motivos se resumem à universidade e à nova turma do curso de web2py, o que me tirou o foco destas postagens por um bom tempo. Então, fica aqui meu sincero pedido de desculpas pelo (bem grande) atraso.

Agora, para encerrar esta série com chave de ouro, vamos enfim colocar nosso app no ar! Para isso, iremos fazer as últimas configurações da nossa aplicação e hospedá-la no site http://pythonanywhere.com. O host foi escolhido pelo fato de ser gratuito e por sua simplicidade, mas fique à vontade para sugerir ou perguntar sobre outros que, sempre que possível, eu ajudarei 🙂

Segue o índice para que você acompanhe também os outros passos:

Deploy

Fazer um deploy significa, em termos práticos, que iremos colocar nosso app em ambiente de produção ou “no ar”. Neste passo-a-passo, como eu disse antes, iremos realizar o deploy na PythonAnywhere. Se você quer utilizar outra hospedagem, que utilize um modelo diferente do que vamos ver, que necessite de outras configurações, primeiro dê uma olhada aqui na documentação de deploy do web2py. Ela cobre deploy em ambientes como:

  • Windows
  • Linux/Unix
    • Apache
    • Nginx
    • Lighttpd
    • Postgreesql
  • Heroku
  • EC2
  • GAE

Personalizando rotas

Como foi mostrado antes, as URLs pelas quais acessamos nossas páginas são definidas por um esquema bastante simples, indicando a aplicação, o controller e a view. Porém, quando colocarmos essa aplicação no ar e o usuário for utilizá-la, ficará bastante “feio” e incrompreensível para ele uma URL tão grande. Por isso, vamos entender como rotear estas URLs para outras mais simples.

As rotas (URLs) modificadas devem ser definidas em um arquivo routes.py que deve ser criado no diretório raíz do web2py (aquele mesmo que contém as pastas applications, examples e o arquivo web2py.py). Exemplos desse arquivo estão em examples/routes.parametric.example.py ou examples/routes.patterns.example.py, dependendo do tipo de roteamento que iremos utilizar. Para decidir isso, vejamos mais informações sobre cada um a seguir.

Parameter-based System

Com esse sistema de roteamento, é possível omitir a aplicação e o controller padrão da URL, mapear domínios diferentes para diferentes aplicações ou controllers, adicionar um seletor de linguagem na URL, entre outros. Resumidamente, vamos transformar a URL de algo como:

http://dominio.com/locadora/default/novo_filme

Em:

http://dominio.com/novo_filme

Ou seja, omitimos o nome da aplicação e do controller e mantemos apenas o nome da página. Bem mais simples, não é?

Para isso, nosso arquivo routes.py seria definido como:


routers = dict(
BASE = dict(default_application='locadora',
default_controller='default'),
)

O que estamos fazendo aqui é definir como aplicação padrão a nossa locadora e como controller padrão o nosso controller default. Ou seja, sempre que nossa URL não tiver uma aplicação e um controller de forma explícita, o web2py vai entender que é para utilizar esses valores aí. Assim, podemos passar somente o nome da página e ele vai inferir que é a página que está no controller default da aplicação locadora.

Pattern-based System

Esse sistema é recomendado para casos mais complexos, onde não queremos deixar a URL somente limpa e amigável, mas sim promover grandes alterações nela.

Para utilizar o Pattern-based System é necessário definir duas tuplas no arquivo routes.py, uma routes_in e outra routes_out. A tupla de routes_in tem a função de associar uma URL personalizada a uma URL padrão, ou seja, é ela que vai falar para qual função determinada URL personalizada aponta. Já a tupla de routes_out faz exatamente o contrário, fala pra qual URL determinada função aponta.


routes_in = (
  ('/cadastrar', '/locadora/default/novo_filme'),
)
routes_out = (
  ('/locadora/default/novo_filme', '/cadastrar'),
)

Assim, sempre que acessarmos http://dominio.com/cadastrar, seremos encaminhados para a função novo_filme.

Esse sistema utiliza o padrão de expressões regulares do Python para reescrever as URLs. Por exemplo, caso você queira receber um argumento nessa função:


routes_in = (
  ('/cadastrar/$argumento', '/locadora/default/novo_filme/$argumento'),
)
routes_out = (
  ('/locadora/default/novo_filme/$argumento', '/cadastrar/$argumento'),
)

Realizando o deploy

Escolha o sistema que mais te agradar e configure suas rotas. Eu sugiro o primeiro, o Parameter-based System, por ser muito simples. Caso você decida pelo Pattern-based System, terá que fazer o roteamento de cada página, uma por uma. Após isso, vamos continuar para a hospedagem!

PythonAnywhere é um ambiente de desenvolvimento e hospedagem que roda em servidores cloud. Ele já tem tudo preparado para rodar Python e suporta especificamente o web2py. O ambiente é fácil de usar, rápido e poderoso. Além disso, dispõe de banco de dados MySQL, shells de Python e integração com Dropbox. Hospedagem profissional está disponível se o plano básico gratuito não for suficiente pra você.

Para usar a PythonAnywhere você precisa criar uma conta, fazer o login e então acessar a Dashboard.

Configurando a conta

  1. Acesse a aba Web
  2. Clique em “Add a new web app”
  3. Selecione a opção web2py
  4. Insira a senha da sua conta
  5. Acessa a aba Consoles
  6. Caso você não tenha um console, inicie um Bash
  7. Dentro do console, instale o web2py:
     wget http://www.web2py.com/examples/static/web2py_src.zip
     unzip web2py_src.zip
    
  8. Ainda dentro do console, crie a senha de administrador do web2py
     python -c "from gluon.main import save_password; save_password(raw_input('admin  password: '),443)"
    
  9. Volte à aba Web e edite o arquivo “/var/www/_pythonanywhere_com_wsgi.py:
     import sys
     path = '/home/<username>/web2py'
     if path not in sys.path: sys.path.append(path)
     from wsgihandler import application # the web2py handler
    

    Onde <username> deve ser seu nome de usuário da PythonAnywhere.

  10. Acesse o web2py pela URL: http://seu_nome_de_usuario.pythonanywhere.com/

Instalando a aplicação

  1. Acesse a interface de administração do web2py no seu localhost.
  2. Nas opções da sua aplicação, vá em Manage > Pack all. Será feito o download de um arquivo compactado da sua aplicação no formato w2p.
  3. Na URL do web2py na PythonAnywhere, acesse a interface de administração e informe a senha que você cadastrou: http://seu_nome_de_usuario.pythonanywhere.com/admin
  4. No menu lateral direito, faça o upload da sua aplicação a partir do arquivo compactado que você fez o download.
  5. Volte ao console Bash da PythonAnywhere e acesse a pasta do web2py
    >>> cd web2py
    
  6. Crie um arquivo routes.py
    >>> pico routes.py
    
  7. Insira o código da sua configuração de rotas. Por exemplo:
    routers = dict(
    BASE  = dict(default_application='locadora',
                 default_controller='default'),
    )
    
  8. Volte à interface de administração do web2py a partir da URL da PythonAnywhere.
  9. Clique em “Reload routes”.
  10. Acesse sua aplicação pela URL: http://seu_nome_de_usuario.pythonanywhere.com

Tudo pronto, sua aplicação está no ar!

Dica: Utilizando git

Caso você queira tornar a atualização da sua aplicação mais prática, você pode utilizar uma ferramenta de versionamento como o Git. Não é meu objetivo explicar sobre ela aqui agora, mas se você já a utiliza e conhece, segue a dica:

  1. Inicie um repositório do git dentro da pasta da sua aplicação. Por exemplo, na pasta web2py/applications/locadora.
  2. Realize todo o processo de commits, pulls e pushs.
  3. Por fim, faça um git clone pelo Bash da PythonAnywhere dentro da sua pasta applications.

Isto pode parecer bastante óbvio para quem já conhece Git, mas fica a dica sobre como é mais fácil atualizar a aplicação assim do que fazendo sempre o pack all. Além disso, existe um contra do pack all: quando você empacota a aplicação no formato w2p, todo o seu banco de dados também será empacotado (caso esteja utilizando o sqlite). Desta forma, você pode substituir dados do servidor em produção pelos dados do localhot. Que perigo!

Conclusão

Desde o último passo nós já tínhamos uma aplicação completa, porém ainda não sabíamos como colocá-la no ar. Agora (finalmente!) nossa aplicação está concluída e rodando perfeitamente no nosso novo host.

Caso você deseje dar uma olhada na aplição final, o código está completo no GitHub: https://github.com/juliarizza/locadora

Parabéns por chegar até aqui e muito obrigada por me acompanhar durante estes passos! 😀

Anúncios

10 comentários sobre “Passo-a-Passo web2py, 7º (e último) passo

  1. Gabriel Schubert disse:

    Olá Julia,

    Parabéns e muito obrigado pelo tutorial. Me ajudou muito. Nunca tinha me aventurado em aplicações web e acabei gostando bastante. O fato de colocar a aplicação online no final também foi muito legal.

    Grande abraço.

    Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s