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

Jelastic 21 de Mai de 2015

imagem ilustração

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, trata-se de 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 install e rake 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 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 aorake 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.

Marcadores