Thats exactly what I did to solve the same problem, I even posted the
recipe here. I’ll copy it as it is small…
For those who want use switchtower to deploy to a remote server that
does not have
access to the main subversion repository, here is a task I just hacked
up to use
switchtower to deploy to my servers by copying a local directory to the
servers, rather
than have the servers use svn checkout.
I actually create my local directory using an svn export, but you can do
whatever you
like here, and just deploy a local copy of your development directory
tree if you like.
You can also exclude whatever directories or files you want using tar’s
–exclude FILE option.
I include my after_update_code as this seems something most people need
to do.
This could be done a lot better but it works
desc “fix up database and .htaccess”
task :after_update_code do
run “cp #{release_path}/config/database.yml.templ
#{release_path}/config/database.yml”
run “cp #{release_path}/public/dot.htaccess.deploy
#{release_path}/public/.htaccess”
end
desc <<DESC
Update all servers with the latest release of the source code.
This is a modified version that copies a local copy to the remote site
DESC
task :update_code, :roles => [:app, :db, :web] do
on_rollback { delete release_path, :recursive => true }
#puts "doing my update_code"
temp_dest= "tmp_code"
#puts "...get a local copy of the code into #{temp_dest} from local
svn"
# but this could also just be your local development folder
system(“svn export -q #{configuration.repository} #{temp_dest}”)
#puts "...tar the folder"
# you could exclude files here that you don't want on your
production server
system(“tar -C #{temp_dest} -c -z -f code_update.tar.gz .”)
#puts "...Sending tar file to remote server"
put(File.read("code_update.tar.gz"), "code_update.tar.gz")
#puts "...detar code on server"
run <<-CMD
mkdir -p #{release_path} &&
tar -C #{release_path} -x -z -f code_update.tar.gz &&
rm -rf code_update.tar.gz &&
rm -rf #{release_path}/log #{release_path}/public/system &&
ln -nfs #{shared_path}/log #{release_path}/log &&
ln -nfs #{shared_path}/system #{release_path}/public/system
CMD
#puts "...cleanup"
system("rm -rf #{temp_dest} code_update.tar.gz")
end