Processo de implantação DRY com Capistrano 3 e Rails 4

Normalmente, um aplicativo da web Ruby on Rails (ou qualquer pilha em JVM, .Net, Python, Node.js ou PHP) precisa ser implementado em dois ou mais servidores remotos, pelo menos um para teste e outro para produção.

Atualizar

Esta é uma versão atualizada da dica, pois estávamos migrando para Rails 4 e Capistrano 3

O processo

Já que estamos usando git, temos pelo menos três branches

  • mestre onde tudo o que está funcionando e pronto para implantação está
  • teste para a versão a ser testada no servidor de teste
  • produção para a base de código pronta para produção

master -> (mesclar para) -> teste -> (mesclar para) -> produção

Este processo não levantará nenhum problema de mesclagem, pois o fluxo de trabalho é linear e o git fará isso avançando rapidamente os pontos de confirmação. Todos os problemas acontecem ao mesclar vários ramos dev para master, mas isso é outra história 🙂

Quando chega a hora de implantar com frequência, torna-se irritante repetir a sequência do git checkout ...então, git mergeentão, git pushentão cap deploy.

Criei um script bash simples para abstrair todas essas etapas.

Os scripts que economizam tempo

#!/usr/bin/env bash

git add
. && git commit -am "$1" && git push origin master && git checkout staging && git merge master && git push origin staging && git checkout master && cap staging deploy

Salve em RAILS_ROOT / bin / deploystaging e torne-o executávelchmod u+x bin/deploystaging

O mesmo para a produção

#!/usr/bin/env bash

git checkout production
&& git merge staging && git push origin production && git checkout master && cap production deploy

Salve este em RAILS_ROOT / scripts / deployproduction e torne-o executávelchmod u+x deployproduction

Usando isso

Agora, depois de trabalhar em qualquer branch e fazer alterações no master , todos os testes verdes, faça

cd  RAILS_ROOT
./bin/deploystaging "Commit message here"
#OR
./bin/deployproduction

Capistrano 3 é inteligente o suficiente para detectar qualquer migração pendente, então não há mais necessidade de sinalizar migrações como no Capistrano 2.

Isso é tudo, boa implantação!