Skip to content

Instantly share code, notes, and snippets.

@rodrigovirgilio
Forked from welingtonsampaio/deploy.rb
Created April 9, 2013 11:17
Show Gist options
  • Save rodrigovirgilio/5344917 to your computer and use it in GitHub Desktop.
Save rodrigovirgilio/5344917 to your computer and use it in GitHub Desktop.
##
# Fazendo deploy com o capistrano de uma aplicação Rails
# usando servidores da Amazon ec2 e unicorn como servidor
# o versionamento do ruby no ambiente de produção foi feito
# com o rbenv ( https://github.com/sstephenson/rbenv ), o SO
# esta com o Centos 5.3 x64
#
# Primeiramente é necessario instalar a gem com o comando:
# gem install capistrano
# ou adicione a linha: gem "capistrano", :group => :development
# em seu arquivo Gemfile
# execute no terminal: capify .
# esse comando adicionará dois arquivos:
# ./Capify
# ./config/deploy.rb # este arquivo de configuração
# Quando trabalhado com o whenever existe uma extensao para
# reiniciação do serviço
# <optinal>
require "whenever/capistrano"
# o methodo "set" define variaveis no escopo de comandos do
# capistrano
# definindo como executar os comandos do whenever
# <optinal>
set :whenever_command, "bundle exec whenever"
# definindo o nome da aplicação, será criado uma pasta com o
# mesmo nome do arquivo
# <required>
set :application, "container_seguranca"
# location é o caminho de acesso ao servidor, pode ser ip,
# host, etc
# <optional>
set :location, "127.0.0.1"
# Eu defini o ambiente de produção do rails, mais a frente vou
# usar para facilitar
# <optinal>
set :rails_env, :production
# Pasta que deverá conter a(s) aplicaçõe(ões). Atenção "application"
# é a variavel definida na linha 28
# <required>
set :deploy_to, "/var/www/apps/#{application}"
# Quando trabalhando com o rbenv deve se copiar o $PATH do linux
# para execuções do bundle e binarios do ruby
# <required>
set :default_environment, {
'PATH' => "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
}
# o deploy foi feito através do repositorio do git
# <required>
set :scm, :git
# dados de acesso ao repositorio git
# <required>
set :repository, "[email protected]:welington_sampaio/project-name.git"
# branche do repositorio
# <optinal>
set :branch, "master"
# forma de envio remote_cache faz o download direto no servidor,
# requer o git instalado no servidor, tomar cuidado com chaves de
# acesso SSH_keys, existe outra forma de envio basta descomentar as
# linhas abaixo, ele fara o download em sua maquina e depois enviará
# para o servidor
# set :deploy_via, :copy
# set :copy_cache, true
# set :copy_exclude, %w(.git Gemfile Gemfile.lock Rakefile)
# <required>
set :deploy_via, :remote_cache
# Usar sudo nos comandos, nao recomendado
# <optinal>
set :use_sudo, false
# Definido o usuario de acesso ssh
# <required>
set :user, "root"
# configuração para acesso ssh usando ssh_key
# <optinal>
ssh_options[:forward_agent] = true
# caminho de acesso a chave ssh_key
# <optinal>
ssh_options[:keys] = ["./doc/ssh_key.pem"]
# nao lembro oq faz rsrs
# <required>
default_run_options[:pty] = true
# Minhas configurações do Unicorn
# comando para execução do unicorn
# <optinal>
set :unicorn_binary, "bundle exec unicorn"
# caminho para o arquivo de configuração do unicorn
# <optinal>
set :unicorn_config, "#{current_path}/config/unicorn.rb"
# onde será armazenado o pid do processo do unicorn
# <optinal>
set :unicorn_pid, "#{current_path}/tmp/pids/unicorn.pid"
# setup some Capistrano roles
# redefinindo o host dos servidores no meu caso todos o mesmo
# servidor dos arquivos rails
role :app, location
# servidor dos arquivos web
role :web, location
# servidor de banco de dados
role :db, location, :primary => true
# executar antes do 'deploy:update_code' o comando 'deploy.check_folders'
# do capistrano
before 'deploy:update_code' do
deploy.check_folders
end
# executar apos o 'deploy:update_code' o comando 'db.backup' e
# 'assets.precompile' do capistrano
after 'deploy:update_code' do
db.backup
assets.precompile
end
namespace :deploy do
#starta a aplicação com o unicorn
desc "Start Application"
task :start, :roles => :app, :except => { :no_release => true } do
# comando bash, navega ate a pasta da versao atual, e executa o unicorn
run "cd #{current_path} && #{try_sudo} #{unicorn_binary} -c #{unicorn_config} -E #{rails_env} -D"
end
# mata o serviço do unicorn
desc "Stop Application"
task :stop, :roles => :app, :except => { :no_release => true } do
# mata o serviço do unicorn passando o pid definido na linha 99
run "#{try_sudo} kill `cat #{unicorn_pid}`"
end
# mata o serviço do unicorn apos axecuções atual
desc "Graceful Stop Application"
task :graceful_stop, :roles => :app, :except => { :no_release => true } do
run "#{try_sudo} kill -s QUIT `cat #{unicorn_pid}`"
end
# reinicia o serviço do unicorn
task :restart, :roles => :app, :except => { :no_release => true } do
# para o serviço
stop
# starta o serviço
start
end
# verifica as pasta necessarias para o envio, e inicialização do s serviços
# para corrigir bug que aconteceu comigo, talvez ja tenham corrigido esse erro
desc "Creating folders necessary"
task :check_folders do
run "if [ ! -d '#{deploy_to}' ];then mkdir #{deploy_to}; fi"
run "if [ ! -d '#{deploy_to}/#{version_dir}' ];then mkdir #{deploy_to}/#{version_dir}; fi"
run "if [ ! -d '#{deploy_to}/#{shared_dir}' ];then mkdir #{deploy_to}/#{shared_dir}; fi"
run "if [ ! -d '#{deploy_to}/#{shared_dir}/pids' ];then mkdir #{deploy_to}/#{shared_dir}/pids; fi"
run "if [ ! -d '#{deploy_to}/#{shared_dir}/log' ];then mkdir #{deploy_to}/#{shared_dir}/log; fi"
end
end
# o resto abaixo segue no mesmo estilo ;)
namespace :db do
desc "Create backup all tables"
task :backup do
run "cd #{current_release} && rake db:backup"
end
desc "Create all tables"
task :migrate do
run "cd #{current_path} && rake db:migrate RAILS_ENV='#{rails_env}' --trace"
end
desc "Include all seed"
task :seed do
run "cd #{current_path} && rake db:seed RAILS_ENV='#{rails_env}' --trace"
end
desc "Remove all tables an include all seed"
task :setup do
run "cd #{current_path} && rake db:drop RAILS_ENV='#{rails_env}' --trace"
run "cd #{current_path} && rake db:create RAILS_ENV='#{rails_env}' --trace"
migrate
seed
end
end
namespace :assets do
desc "Precompile assets of app"
task :precompile do
run "cd #{current_release} && rake assets:precompile"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment