segunda-feira, 7 de maio de 2012

Deploy multistage com Capistrano

Com a gem capistrano podemos configurar um abiente de deploy multistage. Assim podemos ter uma área do site só para testes, separada da área de produção.

Adicione as seguintes gems ao seu projeto Rails:

gem 'capistrano'
gem 'capistrano-ext'


Caso você ainda não tenha um arquivo de deploy, gere-o com o comando (Execute o comando na raiz do projeto):

sauron@mordor:$ capify .


No arquivo de deploy (config/deploy.rb), adicione as seguintes linhas no ínicio do arquivo:


require "bundler/capistrano"

set :stages, %w(staging production)
set :default_stage, 'staging'
require 'capistrano/ext/multistage'


Neste caso estou configurando dois ambientes: staging e production. Também defino o ambiente staging como o padrão.

Para fazer o deploy, execute o comando desta forma:

sauron@mordor:$ cap staging deploy


ou

sauron@mordor:$ cap production deploy


Se você não especificar o ambiente no comando de deploy, vai ser utilizado o ambiente padrão (default_stage):

sauron@mordor:$ cap deploy
// Vai fazer deploy no ambiente staging, porque ele está definido como padrão


Agora que temos os dois ambientes configurados (staging e production), precisamos alterar a configuração do staging para que seja criado uma área específica para testes, separada da área de produção.

Crie um diretório deploy dentro do diretório config do seu projeto:


sauron@mordor:$ mkdir config/deploy


Dentro deste diretório crie dois arquivos, production.rb e staging.rb:

sauron@mordor:$ touch config/deploy/production.rb
sauron@mordor:$ touch config/deploy/staging.rb


A configuração de deploy do ambiente de produção (production) vai ser a mesma que está no arquivo de deploy original (config/deploy.rb), então deixaremos o arquivo production.rb em branco.

Nas configurações do ambiente de testes (staging), faremos as alterações necessárias:

set :application, 'teste.exemplo.com'
set :database, 'teste_exemplo'
set :rails_env, 'staging'

set :user, 'ubuntu'
set :use_sudo, false

set :scm, :git
set :repository,  "git://github.com/projeto/exemplo.git"
set :branch, 'teste'
set :deploy_via, :remote_cache
set :deploy_to, "/home/#{user}/www/#{application}"
set :shared_path, "/home/#{user}/www/#{application}/shared"
set :git_enable_submodules, true
set :keep_releases, 10


Essas são as alterações que eu faço para diferenciar o ambiente de testes do ambiente de produção, sendo as principais mudar o nome da aplicação (para que o deploy seja feito em outro diretório e não sobrescreva o deploy de produção), mudar o banco, o rails_env e o branch do git.

Nenhum comentário:

Postar um comentário