#-----------------------------------------------------
# deploy.rb - controls deployment setup/configuration
# using the capistrano or 'cap' deployment utility.
#-----------------------------------------------------
requires mongrel_cluster recipes to allow restart of mongrel cluster
require 'mongrel_cluster/recipes'
set :application, "[application name]"
set :user, "peter"
set :web_user, "apache"
set :location, "[ip address]"
#If you are using Passenger mod_rails uncomment the following block:
#if you're still using the script/reapear helper you will need these
# http://github.com/rails/irs_process_scripts
namespace :deploy do
task :start do ; end
task :stop do ; end
task :restart, :roles => :app, :except => { :no_release => true } do
run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
end
end
ssh_options[:forward_agent] = true
default_run_options[:pty] = true
set :scm, "git"
set :scm_user, "git"
set :repository, "#{scm_user}@#{location}:/usr/local/share/gitrepos/#{application}.git"
set :scm_passphrase, "your password" #This is your custom users password
set :git_shallow_clone, 1
set :deploy_via, :remote_cache
set :branch, "master"
set :use_sudo, true
set :site_root, "app/[application name]"
role :app, location
role :web, location
role :db, location, :primary=>true
set :deploy_to, "/var/www/html/[your test site url]/#{application}"
#--------------
mongrel details
#--------------
set :mongrel_conf, "#{deploy_to}/current/config/mongrel_cluster.yml"
set :mongrel_user, "mongrel"
set :mongrel_group, "mongrel"
set :runner, nil
set :mongrel_clean, true # helps keep mongrel pid files clean
#----------------------
migration parameters
#---------------------
set :rake, "rake"
set :rails_env, "production"
set :migrate_env, ""
set :migrate_target, :latest
before "deploy:update_code", "custom:set_permissions_for_checkout"
before "deploy:migrate", "custom:set_permissions_pre_schema_dump"
after "deploy:migrate", "custom:set_permissions_post_schema_dump"
before "deploy:migrations", "custom:set_permissions_pre_schema_dump"
after "deploy:migrations", "custom:set_permissions_post_schema_dump", "deploy:cleanup"
before "deploy:symlink", "custom:get_current_ownership"
after "deploy:symlink", "custom:update_application_controller",
"custom:yield_current_ownership",
"custom:set_permissions_for_runtime",
"custom:recreate_public_link"
namespace(:deploy) do
desc "Restart the Mongrel processes on the app server."
task :restart, :roles => :app do
mongrel.cluster.stop
sleep 2.5
mongrel.cluster.start
end
end
namespace(:custom) do
desc "Change ownership of target folders and files to current user"
task :set_permissions_for_checkout, :except => { :no_release => true } do
chown of files to current user
sudo "chown -R #{scm_user}:#{scm_user} #{deploy_to}"
end
desc "Change ownership of target folders and files to current user"
task :set_permissions_for_runtime, :except => { :no_release => true } do
chown of files to current user
sudo "chown -R #{web_user}:#{web_user} #{deploy_to}"
sudo "chown #{mongrel_user}.#{mongrel_group} -R #{deploy_to}/current/tmp/pids"
sudo "chown #{mongrel_user}.#{mongrel_group} -R #{deploy_to}/current/log"
sudo "chown #{mongrel_user}.#{mongrel_group} -R #{shared_path}/pids"
end
desc "Recreate link to serve public folders when hosting within subfolder"
task :recreate_public_link do
run <<-CMD
cd #{deploy_to}/current/public && sudo ln -s . #{application}
CMD
end
desc "Take temporary ownership of current folder to allow symlink updates"
task :get_current_ownership do
sudo "chown #{user}:#{user} #{release_path}"
end
desc "Take temporary ownership of current folder to allow symlink updates"
task :yield_current_ownership do
sudo "chown -R #{web_user}:#{web_user} #{release_path}"
end
desc "Change ownership of db folders and files to current user"
task :set_permissions_pre_schema_dump, :except => { :no_release => true } do
chown of files to current user
sudo "chown -R #{user}:#{user} #{release_path}/db"
end
desc "Change ownership of db folders and files to current user"
task :set_permissions_post_schema_dump, :except => { :no_release => true } do
chown of files to current user
sudo "chown -R #{web_user}:#{web_user} #{release_path}/db"
end
desc "Update application.rb to application_controller.rb"
task :update_application_controller, :roles => :app do
run <<-CMD
cd #{deploy_to}/current/ && sudo rake rails:update:application_controller
CMD
end
task :config, :roles => :app do
run <<-CMD
sudo ln -nfs #{shared_path}/system/database.yml #{release_path}/config/database.yml
CMD
end
desc "Creating symbolic link (custom namespace)"
task :symlink, :roles => :app do
run <<-CMD
sudo ln -nfs #{shared_path}/system/uploads #{release_path}/public/uploads
CMD
end
end