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.

  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
  1. Configure seu public/.htaccess de acordo, substituindo a linha:

RewriteRule ^(.*)$ dispatch.cgi [QSA,L]

Por:


RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
  1. Rode o capify no diretório de desenvolvimento da sua aplicação:

    capify .

  2. 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

  1. Faça commit de tudo pro svn.

  2. 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

  3. 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!

comments powered by Disqus