Configuração pós-deploy em aplicações Ruby/Rails no Jelastic
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
.