Implantando com Capistrano

Introdução

Capistrano é um programa Ruby que oferece um conjunto de ferramentas avançadas para implantar aplicações web para seus servidores. Na sua forma mais simples, Capistrano permite que você copie o código de seu repositório de controle de origem (SVN ou GIT) para o seu servidor via SSH, e executar funções pré e pós-deploy como reiniciar um servidor web, rebentando cache, renomear arquivos, executar migrações de banco de dados e assim por diante. Com Capistrano também é possível instalar em várias máquinas ao mesmo tempo.

Capistrano oferece muitas opções avançadas que não serão abordados neste guia, e pode ser usado para implantar vários tipos de aplicações. Para fins de aprendizagem, vamos levá-lo através dos passos para configurar uma receita simples para a implantação de uma aplicação Rails em um único servidor a partir de qualquer SVN ou repositórios Git. Nós vamos cobrir um fluxo de trabalho comum que permite que você implantar vários ambientes: neste caso, encenação e produção.

Como instalar o Capistrano

 

Para instalar Capistrano você vai precisar Ruby e RubyGems instalado em seu computador. Se você estiver em um Mac rodando Mac OS X 10.5 +, você está pronto para ir. Se não, você pode usar esta referência para aprender a instalar o Ruby e RubyGems.

Em seguida, execute o seguinte comando a partir de um terminal ou de linha de comando:

gem install capistrano
Para este guia, recomendamos a gem capistrano-ext que contém um conjunto extra de ferramentas para fazer suas implantações ainda mais fácil:
gem install capistrano-ext

Se você está tendo o problema ou gostaria de uma documentação mais detalhada, você pode querer fazer referência ao guia oficial do Capistrano guia de iniciação, ou saber mais sobre os vários componentes que fazem o capistrano trabalhar.

Dependências servidor

 

É importante certificar-se de que o servidor é POSIX-compilant e tem acesso SSH. Não se esqueça de configurar suas chaves SSH (Mac ou Windows). Se você não pode SSH em seu servidor, Capistrano não vai funcionar para você.

Prepare o seu Projeto de Capistrano

Navegue para o diretório raiz do seu aplicativo no Terminal e execute o seguinte comando:

capify .

Este comando cria um arquivo especial chamado Capfile em seu projeto, e acrescenta uma receita na implantação do modelo em config/deploy.rb  em seu projeto Rails. Capfile ajuda o Capistrano a carregar suas receita e bibliotecas corretamente, mas você não precisa editá-lo agora.

Em vez disso, abra o deploy.rt arquivo em seu editor de texto favorito. Este arquivo é o lugar onde toda a magia acontece! Você pode começar por apagar tudo no arquivo de modelo, como este guia irá ajudá-lo a preenchê-lo com o código correto para uma receita para uma implantação bem-sucedida.

Trabalhando Receitas com Capistrano

 

Como criar uma receita no Capistrano

Em seu arquivo vazio deploy.rb  ,vamos inserir o nome do seu aplicativo na primeira linha. Se o nome do aplicativo é “sapatos extravagantes”, você deverá digitar:
set :application, "sapatos_extravagantes"

Agora vamos adicionar um repositório de acesso. Usuários do Git podem adicionar o seguinte:

set :scm, :git
set :repository, "git@account.beanstalkapp.com:/repository.git"
set :scm_passphrase, ""

E os usuários do Subversion podem usar este:

set :scm, :subversion
set :repository, "https://account.svn.beanstalkapp.com/repository"

Além disso, vamos definir o usuário em nosso servidor que queremos para executar comandos Capistrano com:

set :user, "server-user-name"

Certifique-se de que este usuário tem acesso a ler e escrever no diretório que você especificou na variável deploy_to.

Antes de ir mais longe, tente conectar-se ao repositório por meio de seu terminal (experimente um co svn ou git clone), para se certificar de que você pode autenticar-se corretamente. Se você não pode se conectar ao repositório, não poderá suar o Capistrano.

Em seguida, vamos adicionar informações sobre seu servidor para a receita. Nós estaremos usando a função Multistage Capistrano (que vem junto com a gem capistrano-ext que foi instalada anteriormente). Isso permite que você configure uma receita para implantar seu código em mais de um local. Neste exemplo, vamos implantar a staging e ambientes de produção.

Comece incluindo vários estágios no topo do seu arquivo deploy.rb:

require 'capistrano/ext/multistage'

Em seguida, especifique os seus ambientes ou “etapas”:

set :etapa, ["staging", "production"]
set :default_stage, "staging"

Desde que você provavelmente implante em staging com mais freqüência do que em produção, descobrimos que ele é útil para fazer o estadiamento do palco padrão. Em seguida, crie um diretório chamado deploy dentro do diretório de configuração do seu aplicativo e, em seguida, adicione arquivos production.rb e staging.rb a ele. Você vai precisar de um arquivo de Ruby por estágio que você configurou, e eles precisam ser nomeados com o mesmo nome para que o Capistrano possa carregar os arquivos apropriados quando você especificar qual estágio você deseja implantar.

Agora vamos preencher nossas configurações production.rb:

server "my_fancy_server.com", :app, :web, :db, :primary => true
set :deploy_to, "/var/www/fancy_shoes"

E então staging.rb:

server "my_fancy_server.com", :app, :web, :db, :primary => true
set :deploy_to, "/var/www/fancy_shoes_staging"

Neste exemplo, temos apenas um servidor que está sendo atribuído todos os três papéis (aplicativo, web e db). A diferença entre a produção e staging está nas diferentes variáveis ​​do diretório deploy_to. Na realidade você pode querer usar servidores diferentes também.

Validando sua Receita

Tudo está pronto para experimentar a nossa receita para o primeiro tempo e deixar Capistrano criar a estrutura de diretório inicial no seu servidor para implantações futuras. Execute o seguinte comando a partir do diretório raiz do seu aplicativo:

cap deploy:setup

Quando você executar este comando, Capistrano vai via SSH ao seu servidor, no diretório que você especificou na variável deploy_to, e criar uma estrutura especial de diretórios que é necessário para poder funcionar corretamente. Se algo está errado com as permissões de acesso ou SSH, você receberá mensagens de erro. Olhe atentamente para a saída que Capistrano dá-lhe enquanto o comando está sendo executado.

O último passo antes de podermos fazer uma implantação real com Capistrano é ter certeza de que tudo está configurado corretamente no servidor a partir do comando de configuração. Há uma maneira simples de verificar, com o comando:

cap deploy:check

Este comando irá verificar o seu ambiente local e seu servidor e localizar possíveis problemas. Se você ver alguma mensagem de erro, faça a devida correção e execute o comando novamente. Uma vez que você pode executar cap deploy: check sem erros, você pode continuar!

Implantar usando sua nova Receita

Depois de verificar a configuração do local e do servidor, execute o seguinte comando:

cap deploy

Isto irá executar a implantação de seu estágio padrão, que está realizando. Se você deseja implantar para a produção, que você execute o seguinte:

cap production deploy

Enquanto estes comandos são executados, você vai ver um monte de saída. Capistrano imprimir todos os comandos executados no servidor, bem como sua produção, tornando possível a depuração de problemas.

Dicas & Truques

 

Melhorar o desempenho com cache remoto

A forma como Capistrano funciona, ele vai criar um novo clone / exportação de seu repositório em cada deploy. Isso pode ser lento, por isso há uma opção para adicionar alguns comandos extras para a nossa receita deploy.rb para acelerar as coisas. Adicione o seguinte para a seção de seu deploy.rb onde você descreve as configurações MEC:

set :deploy_via, :remote_cache
Este comando faz com que o Capistrano faça um único clone / checkout do seu repositório no seu servidor pela primeira vez, em seguida, fazer um svn up ou git pull em cada deploy em vez de fazer todo um clone / exportação. Se você implantar muitas vezes, você vai perceber que isso acelera as implementações de forma significativa.

Adicionar Ganchos personalizados no Deploy

Capistrano brilha, fazendo coisas mais sofisticadas do que simplesmente copiar arquivos via SSH. Você pode configurar os eventos e comandos para executar após a cópia dos arquivos terminar, tais como reiniciar um servidor web ou executar um script personalizado. Capistrano chama essas “tarefas”. Por exemplo, adicione o seguinte código ao seu arquivo deploy.rb:

namespace :deploy do
  task :restart, :roles => :web do
    run "touch #{ current_path }/tmp/restart.txt"
  end

  task :restart_daemons, :roles => :app do
    sudo "monit restart all -g daemons"
  end
end

Tarefas em Capistrano são coisas muito poderosas, e nós estamos apenas arranhando a superfície neste guia. Você pode criar tarefas para executar operações em seu servidor antes, depois ou separadamente de sua implantação. Isso pode ser qualquer tipo de manutenção: reiniciar processos, limpeza de arquivos, envio de notificações por e-mail, correndo migrações de banco de dados, executar scripts, e assim por diante.

Nosso exemplo inclui duas tarefas personalizadas. A tarefa “restart” é construída em Capistrano e será executado por Capistrano automaticamente após a implantação está completa. Usamos o tmp / restart.txt técnica de toque que é comum a aplicações modernas Rails alimentados por passageiros, mas seu servidor pode exigir um comando diferente.

Nossa segunda tarefa é “exemplo restart_daemons”, uma tarefa personalizada que Capistrano não será executado por padrão. Precisamos adicionar um gancho para ele, para que ele seja executado:

after "deploy", "deploy:restart_daemons"
Este comando diz ao Capistrano para executar a nossa tarefa depois de todas as operações de implantar estarem completas. Outros ganchos estão disponíveis, incluindo “before” que executa a tarefa antes que os arquivos são copiados.

Associar Filiais Git Com Ambientes

Uma vez que temos dois ambientes de servidores (staging e produção) muito provavelmente você vai querer vincular seus ramos em Git para esses ambientes, de modo que você pode implantar branch staging para staging ambiente e branch master  de produção automaticamente. Simplesmente adicione a seguinte linha ao seu production.rb:

set :branch, 'production'

E a seguinte linha ao staging.rb:

set :branch, 'staging'

Agora, cada vez que você executar um cap deploy Capistrano irá implantar o código de seu branch de preparo (desde staging que  é o nosso ambiente padrão). Se você executar a cap deploy em produção Capistrano irá implantar o código do seu branch master.

 

Fonte: Beanstalkapp