Skip to content

Instantly share code, notes, and snippets.

@j-mcnally
Last active December 15, 2015 12:19
Show Gist options
  • Select an option

  • Save j-mcnally/5259134 to your computer and use it in GitHub Desktop.

Select an option

Save j-mcnally/5259134 to your computer and use it in GitHub Desktop.
Capistrano deployment for Drupal
#load 'deploy' if respond_to?(:namespace) # cap2 differentiator
##################################
# Edit these
set :application, "APPLICATION_OR_SITE_NAME"
set :host, "SERVER_ADDRESS"
set :repository, "YOUR_GIT_REPO"
set :branch, "master"
set :deploy_to, "PATH_ON_SERVER_TO_DEPLOY_TO"
set :user, "YOUR_DEPLOYMENT_USER"
set :owner, "WHO_NEEDS_TO_OWN_THE_FILES"
set :mysql_user, "MYSQL_USER"
set :mysql_password, "MYSQL_PASSWORD"
set :mysql_db, "MYSQL_DATABASE"
####################################
set :copy_exclude, [".git/*", ".svn/*", ".DS_Store", "config/*"]
set :scm, :git
set :deploy_via, :remote_cache
role :app, host
set :use_sudo, false
set :keep_releases, 3
after "deploy:setup", "deploy:prepare_shared_paths"
after "deploy:update", "deploy:send_settings"
after "deploy:create_symlink", "deploy:restart"
after "deploy:update", "deploy:rsync_private_files"
after "deploy:update", "deploy:cleanup"
before "deploy", "deploy:fix_permissions"
after "deploy", "deploy:reset_permissions"
before "deploy:setup", "deploy:fix_permissions"
after "deploy:setup", "deploy:reset_permissions"
default_run_options[:pty] = true
namespace :deploy do
task :prepare_shared_paths do
run "mkdir -p #{shared_path}/sites"
run "mkdir -p #{shared_path}/sites/all"
run "mkdir -p #{shared_path}/sites/all/modules"
run "mkdir -p #{shared_path}/sites/all/libraries"
run "mkdir -p #{shared_path}/sites/default"
run "mkdir -p #{shared_path}/sites/default/files"
end
task :send_settings do
#CREATE A FILE IN CONFIG WITH A COPY OF YOUR SETTINGS FOR YOUR PRODUCTION BOX
#THIS ALLOWS YOU TO HAVE MULTIPLE ENVIRONMENTS WITH SEPERATE MYSQL SETTINGS
put File.read("config/settings_production.php"), "#{release_path}/sites/default/settings.php"
end
task :rsync_private_files do
run "rsync -av #{release_path}/sites/default/files/ #{shared_path}/sites/default/files/"
run "rsync -av #{release_path}/sites/all/modules/ #{shared_path}/sites/all/modules/"
run "rsync -av #{release_path}/sites/all/libraries/ #{shared_path}/sites/all/libraries/"
run "rm -rf #{release_path}/sites/default/private; return 0"
run "rm -rf #{release_path}/sites/default/files"
run "rm -rf #{release_path}/sites/all/modules/"
run "rm -rf #{release_path}/sites/all/libraries/"
run "ln -s #{shared_path}/sites/default/private #{release_path}/sites/default/private"
run "ln -s #{shared_path}/sites/default/files #{release_path}/sites/default/files"
run "ln -s #{shared_path}/sites/all/libraries #{release_path}/sites/all/libraries"
run "ln -s #{shared_path}/sites/all/modules #{release_path}/sites/all/modules"
end
task :seed_database do
seedfile = ENV['SEED_FILE'].nil? ? "config/seed.sql" : "config/#{ENV['SEED_FILE']}"
put File.read(seedfile), "/tmp/#{application}_dbseed.sql"
run "mysql -u #{mysql_user} -p#{mysql_password} -h localhost #{mysql_db} < /tmp/#{application}_dbseed.sql"
end
task :update_seed do
run "mysqldump -u #{mysql_user} -p#{mysql_password} #{mysql_db} > /tmp/#{application}_dbseed_update.sql"
download "/tmp/#{application}_dbseed_update.sql", "config/#{host}_seed.sql"
end
task :fix_permissions do
run "sudo chown #{user} -R #{deploy_to}"
end
task :reset_permissions do
run "sudo chown #{owner} -R #{deploy_to}"
end
task :restart do
run 'sudo apachectl -k graceful'
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment