Capistrano com remote_cache + mongrel_cluster
Uma dica rápida para fazer o deploy usando remote_cache e mongrel_cluster. Antes da dica, uma introdução nos temas abordados:
Capistrano é uma ferramenta que, a grosso modo, permite realizar tarefas remotas de todos os tipos. Uma das aplicações comuns é no processo de deployment do Rails que é, de longe, facilitado pelo Capistrano
mongrel_cluster é, em suma, um Gem que agrupa um cluster de servidores de aplicação Mongrel, simplificando a tarefa de gerenciá-los.
Remote cache é uma estratégia de deployment do Capistrano que executa uma tarefa interessante: ela faz um clone do repositório GIT (ou um checkout, se for Subversion) e atualiza a aplicação apenas com um rsync, ou seja, copia apenas os arquivos modificados para a release atual.
Dentre as estratégias existentes de deployment do Capistrano, prefiro utilizar o remote_cache. Porém, quando em conjunto com mongrel_cluster, existe a necessidade de que o arquivo de configuração do mongrel_cluster (config/mongrel_cluster.yml) exista para que os processos Mongrel possam ser levantados e o deploy tenha sucesso.
Uma saída seria adicionar o arquivo config/mongrel_cluster.yml ao repositório. Entretanto, perderíamos a flexibilidade de centralizar nosso deploy no deploy.rb (arquivo principal do Capistrano na aplicação). Qualquer modificação exigiria, em seguida, executar mongrel:cluster:configure e comitar para o repositório.
Uma saída simples que montei para manter a flexibilidade de fazer o deploy usando mongrel_cluster e as configurações foi:
require 'mongrel_cluster/recipes' # outras configurações omitidas... set :deploy_via, :remote_cache set :mongrel_conf, "#{current_path}/config/mongrel_cluster.yml" # outras configurações omitidas... before "deploy:start", "mongrel:cluster:configure" before "deploy:restart", "mongrel:cluster:configure"
Com as duas últimas linhas acontece o seguinte: quando um cap deploy ou cap deploy:cold é executado, a configuração do mongrel_cluster é gerada no servidor, a partir das configurações do seu deploy.rb.
Simples, quem sabe seja útil no seu próximo deploy. ![]()
