-
-
Save dimoreira/5818381 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## | |
# 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