mergulhao.info
Por Sylvestre Mergulhão
Sylvestre Mergulhão é programador web e fundador da HE:labs.
Veja também minhas palestras no Speaker Deck e me acompanhe no twitter @smergulhao.
Dreamhost deploy com capistrano
Postado em 03/09/2007
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.
-
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
-
Acesse a sua conta via ssh e apague o diretório current que foi criado pelo Dreamhost em /home/USUARIO/sistema.dominio.com/
-
Siga esses passos se desejar efetuar o deploy sem a necessidade de digitar a senha do ssh a todo momento.
-
Configure seu config/enviroment.rb para modo produção e o config/database.yml com a base de produção.
-
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
- Configure seu public/.htaccess de acordo, substituindo a linha:
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
Por:
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
-
Rode o capify no diretório de desenvolvimento da sua aplicação:
capify .
-
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
-
Faça commit de tudo pro svn.
-
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
-
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!