Tecnocracia Digital

Junho 30, 2011 por italomaia

Como rodar scripts Lua WSAPI com uWSGI no Ubuntu

Você gosta de desenvolver para web? Gosta da linguagem de programação lua? Então continue lendo...

Lua? No céu?

Lua é uma linguagem de programação brasileira bastante compacta (em sintaxe e tamanho) e agradável desenvolvida pela galera da PUCRio. Cheia de peculiaridades, como ser mais famosa no exterior que no Brasil, e adeptos, é difícil não apreciar a sintaxe desta linguagem, bem conhecida por sua aplicação em games e facilidade de extensão, ela também possui outras aplicabilidades muito interessantes, como o desenvolvimento web.

Lua, na Web!

Linguagens já consolidadas como poderosas ferramentas para desenvolvimento web como Java, Python, PHP e Ruby possuem grande vantagem neste terreno. Simplesmente há muita, MUITA informação disponível na internet sobre como desenvolver para web utilizando estas linguagens.

Com Lua, é quase assim. Sendo uma linguagem relativamente nova, Lua não possui "tanta gente" engajada no melhoramento e expansão de cada um dos ramos que a linguagem oferece. Isso quer dizer que, enquanto algumas linguagens mais de uma dezena de frameworks web ativos e em constante desenvolvimento, Lua possui apenas um framework completo e conhecido para tal tarefa, o Orbit. Triste, não é? Bem, nem tanto. Isto também é um sinal de que ainda há muita coisa a ser feita e melhorada.

Aí você me pergunta: quer dizer que se eu quiser desenvolver para web com Lua eu tenho que utilizar o Orbit? Não! Você não PRECISA utilizar o Orbit, mesmo sendo uma boa ideia. Você também pode escrever seu aplicativo diretamente sob o conector WSAPI, que trata-se de uma camada de abstração entre sua aplicação web e o servidor http, ou pode escrever seu próprio framework, também sob WSAPI e utilizá-lo para construir sua aplicação. Legal, legal, mas, como faz isto?

Sua primeira aplicação sob WSAPI

Escrever uma aplicação WSAPI é fácil. Veja o código abaixo para um hello world:

-- arquivo hello.lua
function hello(wsapi_env)
  local headers = { ["Content-type"] = "text/html" }

  local function hello_text()
    coroutine.yield("<html><body>")
    coroutine.yield("<p>Hello World!</p>")
    coroutine.yield("</body></html>")
  end

  return 200, headers, coroutine.wrap(hello_text)
end
return hello

Tudo bem simples: você tem a função principal hello que retorna o status da requisição, os headers http e uma função interna que escreve o resultado para o usuário, o HTML. Mas, iaí, é só executar? Nem perto disto! De posse do seu aplicativo, o desafio agora é preparar o ambiente.

Primeiramente, instale o lua e luarocks com o seguinte comando:

sudo apt-get install lua5.1 luarocks

Agora instale as bibliotecas necessárias:

luarocks install wsapi wsapi-fcgi

Por último, instale algumas dependências necessárias para compilar o uwsgi, que funcionará como servidor no ambiente de desenvolvimento:

sudo apt-get install build-essential python-dev liblua5.1-0-dev

Agora baixe e descompacte a última versão stable do uwsgi deste link. Dentro da pasta descompactada, deve existir uma pasta chamada buildconf, entre nela e abra o arquivo default.ini. Dentor deste arquivo deve existir uma linha de código assim: embedded_plugins = python,..., pois bem, antes de python, adicione lua,. Salve o arquivo e feche. Volte para a raíz do diretório uwsgi e use o comando make para compilar o programa. Um executável chamado uwsgi será criado na raíz do diretório. Mova-o para o diretório /usr/bin/ para que fique fácilmente acessível. Agora, na pasta do seu arquivo hello.lua, execute o seguinte comando:

uwsgi --http :8080 -M -p 2 --lua hello.lua -m --http-modifier1 6 --vacuum --no-orphans

Este comando irá inicializar um servidor http na porta 8080 da sua máquina local onde sua aplicação hello.lua estará rodando. Acesse-a através deste link. Prontinho! Agora você já tem sua aplicação web lua rodando. O resto é com vocês! = ]

Se encontrar qualquer problema com o tutorial, por favor, informe nos comentários.

Tags: lua ubuntu uwsgi web wsapi