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.