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 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 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.