# # # CAPISTRANO 2.5.0 DEPLOY # GIT, Passenger, BackgrounDRB, Juggernaut # # Workflow: # cap # cap deploy:setup # cap deploy:cold # . . . # cap deploy # # Config files: # Copy config/.*ex files do shared/production. on setup. # Copy from shared on deploy. # set :application, "APPNAME" set :stages, %w{ role1 role2 } set :default_stage, 'role1' # # # # ROLES # task :role1 do ssh_options[:port] = 22223 # set :domain, "some.foo.com" role :app, "foo.foo.com" role :web, "foo.foo.com" role :db, "foo.foo.com", :primary => true end task :role2 do ssh_options[:port] = 22222 role :app, "gw.foo.com.br" role :web, "gw.foo.com.br" role :db, "gw.foo.com.br", :primary => true end # # # GIT # set :user, "deployer" set :scm, :git set :repository, "ssh://git@REPO/PATH.git" set :branch, "master" set :deploy_via, :remote_cache set :keep_releases, 7 # # # SSH # ssh_options[:paranoid] = false #ssh_options[:port] = 0000 default_run_options[:pty] = true set :use_sudo, false # # # DEPLOY TO set :deploy_to, "/var/www/apps/#{application}" # # # GEMS set :packages, ["postgres", "hpricot"] # # # TASKS # desc "Load fixtures" task :fixtures do rake = fetch(:rake, 'rake') rails_env = fetch(:rails_env, 'production') run "cd #{current_path}; #{rake} RAILS_ENV=#{rails_env} db:fixtures:load" end after "migrate", "fixtures" # # # BackgroundDrb # namespace :backgroundrb do desc "Start the backgroundrb server" task :start , :roles => :app do run "cd #{current_path} && nohup ./script/backgroundrb start -e production > #{current_path}/log/backgroundrb-cap.log 2>&1" end desc "Stop the backgroundrb server" task :stop, :roles => :app do run "cd #{release_path} && ./script/backgroundrb stop" end desc "Restart the backgroundrb server" task :restart, :roles => :app do stop start end end # # # Juggernaut # namespace :juggernaut do desc "Stop the juggernaut push server" task :stop , :roles => :app do run "cd #{current_path} && rake juggernaut:stop RAILS_ENV=production" end desc "Start the juggernaut push server" task :start, :roles => :app do run "cd #{current_path} && rake juggernaut:start RAILS_ENV=production" end desc "Restart the juggernaut push server" task :restart, :roles => :app do run "cd #{current_path} && rake juggernaut:restart RAILS_ENV=production" end end # # # DEPLOY # namespace :deploy do # não usar sudo no cleanup before("deploy:cleanup") do set :use_sudo, false end # Advanced Rails Recipes desc "Roda depois de uma cada implantação bem sucedida" task :after_default do #backgroundrb::restart #juggernaut::restart cleanup end desc "Copiar config database" task :copy_database_configuration do db_config = "#{shared_path}/production.database.yml" run "cp #{db_config} #{release_path}/config/database.yml" end after "deploy:update_code", "deploy:copy_database_configuration" desc "Copiar config juggernaut" task :copy_juggernaut_configuration do jugger_config = "#{shared_path}/production.juggernaut_hosts.yml" run "cp #{jugger_config} #{release_path}/config/juggernaut_hosts.yml" end after "deploy:update_code", "deploy:copy_juggernaut_configuration" task :start, :roles => :app do backgroundrb::start juggernaut::start end task :stop, :roles => :app do backgroundrb::stop juggernaut::stop end task :restart, :roles => :app do backgroundrb::restart juggernaut::restart run "touch #{release_path}/tmp/restart.txt" end task :after_setup do run "mkdir #{shared_path}/files" run "cp #{release_path}/config/database.yml.ex #{shared_path}/production.database.yml" run "cp #{release_path}/config/juggernaut_hosts.yml.ex #{shared_path}/production.juggernaut_hosts.yml" end desc "Criar symlinks diretorios compartilhados" task :after_symlink do run "rm -rf #{release_path}/public/files" run "ln -nfs #{shared_path}/files #{release_path}/public/files" end task :after_update_code, :roles => :app do run "rm -rf #{release_path}/public/.htaccess" end end # # # TAIL # desc "Tail multiple log files" task :tail_log, :roles => :app do stream "tail -f #{shared_path}/log/production.log" stream "tail -f #{shared_path}/log/apache-error.log" stream "tail -f #{shared_path}/log/apache-access.log" end desc "Tail Daemons" task :tail_daemon, :roles => :app do stream "tail -f #{shared_path}/log/backgroundrb-cap.log" stream "tail -f #{shared_path}/log/juggernaut.log" # stream "tail -f #{shared_path}/log/backgroundrb-server.log" end