class Capistrano::SCM::Rsync
Public Instance Methods
define_tasks()
click to toggle source
# File lib/capistrano/rsync.rb, line 17 def define_tasks namespace :rsync do desc <<-DESC Copy application source code from (remote) cache to release path. If a :rsync_deploy_build_path is set, only that relative path will \ be copied to the release path. DESC task create_release: :update_remote_cache do on release_roles :all do execute :rsync, '--archive', "#{fetch(:deploy_to)}/#{fetch(:rsync_remote_cache)}/#{fetch(:rsync_deploy_build_path)}", "#{release_path}/" end end desc <<-DESC Update remote cache of application source code. This will be rsynced to :rsync_remote_cache, using rsync options set in \ :rsync_options DESC task update_remote_cache: :update_local_cache do on release_roles :all do |role| host_spec = role.hostname host_spec = "#{role.user}@#{host_spec}" if role.user run_locally do execute :rsync, *fetch(:rsync_options), "#{fetch(:rsync_local_cache)}/", "#{host_spec}:#{fetch(:deploy_to)}/#{fetch(:rsync_remote_cache)}/" end end end desc <<-DESC Update local cache of application source code. This will be checked out to :rsync_local_cache. DESC task :update_local_cache do run_locally do unless File.exist?("#{fetch(:rsync_local_cache)}/.git") FileUtils.mkdir_p(fetch(:rsync_local_cache)) execute :git, :clone, '--quiet', repo_url, fetch(:rsync_local_cache) end within fetch(:rsync_local_cache) do execute :git, :fetch, '--quiet', '--all', '--prune' execute :git, :checkout, fetch(:branch) execute :git, :reset, '--quiet', '--hard', "origin/#{fetch(:branch)}" end end end desc <<-DESC Determine version of code that rsync will deploy. By default, this is the latest version of the code on branch :branch. DESC task :set_current_revision do run_locally do within fetch(:rsync_local_cache) do set :current_revision, capture(:git, "rev-list --max-count=1 #{fetch(:branch)}") end end end end end
register_hooks()
click to toggle source
# File lib/capistrano/rsync.rb, line 81 def register_hooks after 'deploy:new_release_path', 'rsync:create_release' before 'deploy:set_current_revision', 'rsync:set_current_revision' end
set_defaults()
click to toggle source
# File lib/capistrano/rsync.rb, line 5 def set_defaults # command-line options for rsync set_if_empty :rsync_options, %w[--archive --delete --exclude=.git*] # Local cache (Git checkout will be happen here, resulting files then get rsynced to the remote server) set_if_empty :rsync_local_cache, 'tmp/.capistrano-rsync-deploy' # Remote cache on the server. Will be synced with the local cache before each release, and then used as # source for the release. Saves needing to transfer all the source files for each release. set_if_empty :rsync_remote_cache, 'rsync-deploy' end