Tive o prazer de ser envolvido no primeiro projeto em RoR (Ruby on Rails) da empresa, o que me colocou em contato pela primeira vez com essa linguagem. Tenho aprendido muita coisa e cada hora surge uma novidade para ver. Resolvi escrever este post para um probleminha que estávamos tendo e que achei interessante compartilhar.

O “problema” que estavámos tendo e achei muito interessante. Estamos usando o subversion para controle de versão do código e íamos usar o capistrano para fazer deploy deste projeto em particular (e de projetos futuros) nos ambientes de desenvolvimento, qa’ s e produção. A questão é que precisávamos passar o nome de uma tag criada no subversion para o projeto diretamente para o capistrano para que ele fizesse o deploy daquela tag específica. Quem já trabalhou com o capistrano, sabe que no capfile precisamos especificar o repositório que vamos estar trabalhando e que para fazermos o checkout de uma tag qualquer, essa variável deve ser setada dinamicamente, mediante algum parâmetro recebido. Não quero me estender muito, por isso vou direto ao assunto. O trecho abaixo serve para passarmos o nome da tag como parâmetro para o capistrano para que a definição do repositório fique correta.

set :application, "blabla";

tag = (ENV["TAG"] || "")
set :repository, "http://svn.url.com/repo/#{application}/tags/#{tag}"
set :repository, "http://svn.url.com/repo/#{application}/trunk" if tag.empty?

puts "tag: #{tag}"

set :port, 22
set :deploy_to, "/seu/diretorio/para/deploy/#{application}"
set :deploy_via, :copy
set :copy_strategy, :export
set :user,"capitaonascimento"

puts "application: #{application}"
puts "repository: #{repository}"
puts "deploy_to: #{deploy_to}"
puts "ssh user: #{user}"

Como trabalho na area da produção, gosto de ver o que está realmente está acontencendo, por isso coloquei os vários puts para que seja printado na tela o valor de algumas variáveis. Além do mais, isso é uma ótima de forma de debug e verificar se tudo está ocorrendo da maneira que você gostaria. Desta forma, para fazer o deploy do projeto TropaDeElite por exemplo deveríamos fazer: cap deploy TAG=’NOME DA TAG’

É isso… espero ter ajuda. Ahhh, para quem está começando no mundo ruby como eu, o comando set :var_name, “var_data” serve para setar uma variável no capistrano. Para ler essa variável devemos usar #{var_name} e o puts é para printar uma mensagem na console do terminal.