Back-End

23 jun, 2015

Configuração pós-deploy em aplicações Ruby/Rails no Jelastic

Publicidade

Recentemente auxiliei o camarada Fabio Akita a colocar uma aplicação Rails no Jelastic. No review que ele escreveu em seu blog, apesar de positivo, chamou a minha atenção um detalhe que havia me passado desapercebido: deployment pipeline.

Apesar do nome difícil, nada mais é do que as tarefas que precisam ser executadas em uma aplicação Ruby/Rails logo após o deploy no servidor. Em um IaaS (Infraestrutura como Serviço), você teria que fazer isso manualmente, ou através de algum software de deploy/automação, como o Capistrano.

Embora o Jelastic permita fazer uso dessa ferramenta, uma vez que permite acesso SSH no seu ambiente de cloud e digitando tudo na mão, não é isso que queremos; caso contrário, não estaríamos utilizando cloud. Além disso, o Jelastic é um PaaS, e a vantagem de utilizar um serviço desse tipo é justamente diminuir a necessidade de administração de sistemas, uma vez que ele automatiza muitas das tarefas essenciais para manter uma infraestrutura complexa no ar sem ter que digitar comandos manualmente, como bundle installrake db:migrate toda vez que você fizer um novo deploy.

Gerenciamento de dependências

Para o gerenciamento de dependências, tudo é muito simples, e o Jelastic segue o padrão da linguagem (não só apenas no Ruby, mas nas outras linguagens disponíveis): se o projeto tiver um arquivo Gemfile na pasta root, ele irá resolver as dependências automaticamente com o Bundler logo após o deploy no servidor, sem que você tenha que realizar alguma intervenção manual. Fique tranquilo, pois mesmo que você realize alguma mudança no arquivo posteriormente, o Jelastic reconhece as mudanças e instala as dependências faltantes no projeto.

Ações pós-deploy

É muito comum que projetos Rails precisem executar algumas ações após o deploy da aplicação, como criar as bases de dados no banco de dados de produção e outras tarefas do gênero.

Como perder tempo executando essas ações repetitivas toda vez que precisamos colocar um sistema em produção não é nada animador, o melhor mesmo é automatizar esse tipo de tarefa. Para isso, a plataforma permite que você execute comandos do rake através de um arquivo rake_deploy na pasta root do projeto.

O arquivo deve conter uma lista de comandos que serão passados ao rake para a execução consecutivamente. Cada comando deve estar em uma linha separada. O Jelastic irá executar esses comandos no arquivo rake_deploy depois de cada reinício do Apache/Nginx/Raptor e deletar o arquivo após uma execução bem sucedida.

Por isso, se você precisa executar comandos diferentes depois de cada deploy, terá que criar arquivos diferentes a cada vez e colocar os comandos corretos nele. A saída dos comandos pode ser visualizada através do botão de “Logs” do Jelastic.

A sintaxe do arquivo rake_deploy é a seguinte:

PARÂMETRO_1  
PARÂMETRO_2  
PARÂMETRO_3  
...
PARÂMETRO_N

E o Jelastic executará o seguinte script:

rake PARÂMETRO_1  
rake PARÂMETRO_2  
rake PARÂMETRO_3  
...
rake PARÂMETRO_N

Um exemplo válido seria:

generate_secrete_token  
db:migrate  
assets:precompile

Obs: para vendorizar gems, você precisa adicionar este parâmetro ao arquivo rake_deploy: gems:unpack.