Dreamhost deploy com capistrano
Realmente o capistrano me surpreendeu bastante pela utilidade e facilidade de uso. Assim que possível vou passar a realizar deploy de todos os meus sistemas/sites/etc que estão rodando na web utilizando ele - inclusive os que não rodam em Rails! O teste dessa vez foi no sistema de inscrições do Fórum de Software Livre desse ano. Quem quiser testar para ver como está ficando e sugerir mudanças acessar: http://inscricao.mergulhao.info.
Deixo aqui um passo a passo para quem quer fazer deploy de uma aplicação utilizando Capistrano e o Dreamhost (pode facilmente ser adaptado para outros hosts). Antes de tudo, instale o capistrano. Caso não esteja utilizando o Dreamhost, certifique-se que o seu servidor possui o svn cliente de linha de comando instalado.
ATENÇÃO: Todos os comandos aqui listados são executados em seu ambiente local de desenvolvimento.
1. Crie um subdomínio/domínio no painel de controle do Dreamhost, habilite o fastcgi e aponte o diretório web para algo semelhante:
/home/USUARIO/sistema.dominio.com/current/public
2. Acesse a sua conta via ssh e apague o diretório current que foi criado pelo Dreamhost em /home/USUARIO/sistema.dominio.com/
3. Siga esses passos se desejar efetuar o deploy sem a necessidade de digitar a senha do ssh a todo momento.
4. Configure seu config/enviroment.rb para modo produção e o config/database.yml com a base de produção.
5. Substitua seu public/dispatch.fgci por esse(dica pega do Klaus):
#!/usr/bin/ruby1.8
require File.dirname(__FILE__) + "/../config/environment"
require 'fcgi_handler'
class RailsFCGIHandler
private
def frao_handler(signal)
dispatcher_log :info, "asked to terminate immediately"
dispatcher_log :info, "frao handler working its magic!"
restart_handler(signal)
end
alias_method :exit_now_handler, :frao_handler
end
RailsFCGIHandler.process! nil, 6
6. Configure seu public/.htaccess de acordo, substituindo a linha:
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
Por:
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
7. Rode o capify no diretório de desenvolvimento da sua aplicação:
capify .
8. Utilize a receita abaixo(config/deploy.rb) configurando-a de acordo:
# Receita de deploy de apps Rails para o Dreamhost. Capistrano V2.
# Pode ser facilmente adaptada para outros hosts compartilhados.
# Por Sylvestre Mergulhao em 20/08/2007
# Email: contato (at) mergulhao.info
# Site: http://mergulhao.info
# Define o nome da aplicacao e o dominio a qual estara linkada no dreamhost
set :application, "inscricao.mergulhao.info"
# Define seu usuario no dreamhost
set :user, "mergulhao"
# Define o local do seu repositorio svn
set :repository, "http://mergulhao.info/inscricao/trunk"
# Nao precisa ser alterado daqui pra baixo!
set :use_sudo, false
set :deploy_to, "/home/#{user}/#{application}"
set :domain, "#{user}@#{application}"
role :app, domain
role :web, domain
role :db, domain, :primary => true
namespace :deploy do
desc "Restarts all FCGI processes."
task :restart, :roles => :app do
# NOTA: Segundo o reaper a opcao --dispatcher esta depreciada, verificar
# outra solucao.
run "#{current_path}/script/process/reaper --dispatcher=dispatch.fcgi"
end
end
9. Faça commit de tudo pro svn.
10. Rode o setup e verifique se não ocorre nenhum erro. Esse comando somente precisa ser executado no primeiro deploy. Ele é responsável por criar a estrutura de diretórios necessária no servidor.
cap deploy:setup
11. Rode o deploy com as migrações:
cap deploy:migrations
Para executar os próximos deploys basta executar:
cap deploy
Se existirem migrações para realizar:
cap deploy:migrations
Se eu não esqueci de colocar nenhum passo e deu tudo certo, sua aplicação estará no ar. É claro que estamos seguindo aqui algumas convenções, como estar utilizando svn para controle de versões. Espero que seja útil, estou aberto a receber o feedback sobre isso, deixe-me saber se você utilizou essa receita com sucesso(e com fracasso também!).
É isso!
03.09.2007 01:35 AM





September 23rd, 2007 at 04:46 PM
So nao entendi o passo 7.
O diretório de desenvolvimento e um diretório local. Na minha maquina. Não na dreamhost.
O processo nao deveria ser, desenvolvimento local, commit e deploy?
September 23rd, 2007 at 10:43 PM
Está correto Daniel. O capify é apenas o comando que gera o arquivo Capfile e config/deploy.rb. Você executa ele no diretório local de desenvolvimento.
Depois você substitui o conteúdo do config/deploy.rb pelo do passo 8. Faz commit de tudo para o svn e aí sim roda o deploy.
Um abraço!
October 2nd, 2007 at 10:29 AM
Gostaria de fazer algumas observações que podem ser importantes pra quem está começando.
1) Antes de executar o passo 7 vc deve instalar o capify: gem install -y capistrano
2) Todos os passos devem ser executados em seu ambiente de desenvolvimento ( local ) no diretorio onde esta seu projeto e não no servidor como inicialmente eu mesmo imaginei.
3) O item dez e responsavel por criar os diretorios releases e shared no servidor de produção
October 2nd, 2007 at 11:30 AM
Outro ponto importante e que o cap espera que vc tenha o svn command-line instalado ( https://www.projects.dev2dev.bea.com/Subversion%20Clients/CommandLineSVN.html ) localmente para poder executar o passo 11
October 11th, 2007 at 05:19 PM
Daniel,
Muito obrigado pelo seu feedback. Atualizei o post com suas sugestões.
Abraço!